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

  今天遇到一個有趣的問題,若是咱們使用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

相關文章
相關標籤/搜索