1. 程式人生 > >關於使用10字節的內存讀取數據和寫入數據

關於使用10字節的內存讀取數據和寫入數據

-i 相加 補碼 理解 減法 數組 如果 class spa

今天遇到一個有趣的問題,如果我們使用byte數組去存儲int或者dobble數據會怎麽樣

首先我們需要了解的是計算機是通過補碼的形式存儲值得,這樣更方便操作

采用補碼的原因或好處如下,采用補碼運算具有如下兩個特征:

1)因為使用補碼可以將符號位和其他位統一處理,同時,減法也可以按加法來處理,即如果是補碼表示的數,不管是加減法都直接用加法運算即可實現。

2)兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄。

這樣的運算有兩個好處:

1)使符號位能與有效值部分一起參加運算,從而簡化運算規則。從而可以簡化運算器的結構,提高運算速度;(減法運算可以用加法運算表示出來。)

2)加法運算比減法運算更易於實現。使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。

1.int轉byte[]

那麽比如我們使用byte[] 存儲一個int 值,我們知道int有4個字節,那麽我們就需要將4個長度的bye數組來存儲,那麽每一個位置上存儲int類型的一個字節位上的數值,思路大致是這樣,那麽這樣就存在著一問題,是高位存儲還是,下位存儲,一般采用高位,因為我們將 byte數組index大的來存儲,int的第一個8位,話不杜說上代碼

  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只會截取後八位,所以沒必要;

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;

關於使用10字節的內存讀取數據和寫入數據