Java 字節操作

Class ByteUtils{

    public static int bytes2Int( byte[] bytes ){
    int num =bytes[3]&0xFF;
    num | =( (bytes[2]<<8) ) & 0xFF00);
    num | =( (bytes[1]<<16) ) & 0xFF0000);
    num | =( (bytes[0]<<24) ) & 0xFF000000);
}


    public static byte[] int2Bytes( int num ){
    byte[] byte = new btye[4];
   // byte[0] =( num&0xFF000000)>>24;
    //byte[1] =( num&0x00FF0000)>>16;
    //byte[2] =( num&0x0000FF00)>>8;
    //byte[3] =( num&0x000000FF);
    byte[0]=(byte) ( (i>>24)&0xFF);
    byte[1]=(byte) ( (i>>16)&0xFF);
    byte[2]=(byte) ( (i>>8)&0xFF);
    byte[3]=(byte)  (i&0xFF);
    
    return byte;

}
}
ava中只有char類型是無符號的是嗎



8爲二進制0000 0000

2.二進制在計算機中以補碼形式存在
正數的補碼就是它本身
負數的補碼是對應正數的原碼取反加1得到

3.-1的補碼是 1的原碼0000 0001 取反加1就是 1111 1111

4.unsigned是無符號數,把1111 1111看成正數 255 因爲255的二進制爲(1111 1111)



你RGBA,每個一個字節,java裏面沒有無符號,還要
byte b = read();
int blue = ((int)b) & 0xff;
否則直接用b的話,是 [-128,127]的範圍,要這麼轉一下才行,煩

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什麼區別麼?  -1  

不 & 0xff的話,255會變成-1





java爲什麼經常用int不用short

jvm指令集是基於int的,你用short也要轉成int 如果用int那麼就一個指令iinc,用short的話需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte進行運算,到最後JVM還是給他當成int。棧幀裏每個slot都是32位。不浪費,前提是局部變量運算。


如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?

如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?


如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?







ava中只有char類型是無符號的是嗎



8爲二進制0000 0000

2.二進制在計算機中以補碼形式存在
正數的補碼就是它本身
負數的補碼是對應正數的原碼取反加1得到

3.-1的補碼是 1的原碼0000 0001 取反加1就是 1111 1111

4.unsigned是無符號數,把1111 1111看成正數 255 因爲255的二進制爲(1111 1111)



你RGBA,每個一個字節,java裏面沒有無符號,還要
byte b = read();
int blue = ((int)b) & 0xff;
否則直接用b的話,是 [-128,127]的範圍,要這麼轉一下才行,煩

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什麼區別麼?  -1  

不 & 0xff的話,255會變成-1





java爲什麼經常用int不用short

jvm指令集是基於int的,你用short也要轉成int 如果用int那麼就一個指令iinc,用short的話需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte進行運算,到最後JVM還是給他當成int。棧幀裏每個slot都是32位。不浪費,前提是局部變量運算。


如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?


ava中只有char類型是無符號的是嗎



8爲二進制0000 0000

2.二進制在計算機中以補碼形式存在
正數的補碼就是它本身
負數的補碼是對應正數的原碼取反加1得到

3.-1的補碼是 1的原碼0000 0001 取反加1就是 1111 1111

4.unsigned是無符號數,把1111 1111看成正數 255 因爲255的二進制爲(1111 1111)



你RGBA,每個一個字節,java裏面沒有無符號,還要
byte b = read();
int blue = ((int)b) & 0xff;
否則直接用b的話,是 [-128,127]的範圍,要這麼轉一下才行,煩

int blue = ((int)b) & 0xff;   255
int blue = ((int)b)有什麼區別麼?  -1  

不 & 0xff的話,255會變成-1





java爲什麼經常用int不用short

jvm指令集是基於int的,你用short也要轉成int 如果用int那麼就一個指令iinc,用short的話需要iload,iconst_`1,iadd,i2s,istore,


你用short或者byte進行運算,到最後JVM還是給他當成int。棧幀裏每個slot都是32位。不浪費,前提是局部變量運算。


如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?

如何讓一個字節的數據取值範圍可以是0~255? 在JAVA裏byte的範圍是-128~127,不符合我的要求的。請問怎麼樣才能實現呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章