Java高低位和byte轉int
阿新 • • 發佈:2019-01-11
最近研究I/O流,發現read()方法返回的是int型別,原來是將一個byte讀入到一個int,有效的資料只佔據int型變數的最低8位。在正常情況下這個int型的變數永遠都不可能是負數。
什麼是高低位?
什麼是低8位?
一個int型別的變數能存放4Byte,也就是能存放32位二進位制數,而一個32位二進位制數中權值最大的24位就是高24位,那麼剩下的就是低8位。
如何將byte轉換為int?
需要將前24位去除,也就是轉換為0。Java對byte總是做有符號處理;
所以可以通過將byte和0xff進行二進位制“&“得到它的無符值。
例如:
byte的二進位制為:11001010;
0xff的二進位制為:11111111;
1111111111111111111111111 11001010 & 11111111 = 000000000000000000000000 11001010
上面的例子為什麼會新增這麼多“1”?
當系統檢測到byte可能會轉化成int或者說byte與int型別進行運算的時候,就會將byte的記憶體空間高位補1(也就是按符號位補位)擴充到32位