今天遇到一個有趣的問題,若是咱們使用byte數組去存儲int或者dobble數據會怎麼樣數組
首先咱們須要瞭解的是計算機是經過補碼的形式存儲值得,這樣更方便操做spa
採用補碼的緣由或好處以下,採用補碼運算具備以下兩個特徵:
1)由於使用補碼能夠將符號位和其餘位統一處理,同時,減法也能夠按加法來處理,即若是是補碼錶示的數,無論是加減法都直接用加法運算便可實現。
2)兩個用補碼錶示的數相加時,若是最高位(符號位)有進位,則進位被捨棄。
這樣的運算有兩個好處:
1)使符號位能與有效值部分一塊兒參加運算,從而簡化運算規則。從而能夠簡化運算器的結構,提升運算速度;(減法運算能夠用加法運算表示出來。)
2)加法運算比減法運算更易於實現。使減法運算轉換爲加法運算,進一步簡化計算機中運算器的線路設計。設計
1.int轉byte[]code
那麼好比咱們使用byte[] 存儲一個int 值,咱們知道int有4個字節,那麼咱們就須要將4個長度的bye數組來存儲,那麼每個位置上存儲int類型的一個字節位上的數值,思路大體是這樣,那麼這樣就存在着一問題,是高位存儲仍是,下位存儲,通常採用高位,由於咱們將 byte數組index大的來存儲,int的第一個8位,話不杜說上代碼blog
public static void int2Byte(int db) { byte[] b = new byte[4];//咱們就使用4長度數組,方便理解 for(int i=0;i<4;i++){ b[4-1-i] = (byte)((db >> 8*i)& 0xff)) } }
此處咱們與一個 0xff(00000000 00000000 00000000 11111111),前3個字節都置爲00000000,最後一個字節保存不變,其實這一步並不須要,由於這裏byte只會截取後八位,因此不必;class
2.byte[]轉int數據
public static byte2int( bye[] arr){ int sun=0; for(int j=0;j<4;j++) { int n = (int)arr[j]& 0xff; n <<= (4-j) * 8; sum += n; } }
這裏的0xff就很是用必要了,可使前三個字節變成000000000000;
static