天天看點

java中byte轉int時候為什麼要&0xff

首先先了解

byte 是8位 取值範圍是-128~127

int    是32位

補碼、反碼、原碼

補碼 :原碼的反碼+1

反碼 :原碼除符号位以外的全部取反 既0變1 1變0

以上是負數的補碼,正數的補碼是它本身

在計算機中負數是用補碼表示的,為什麼用補碼呢

計算機為什麼使用補碼來存儲資料

byte最高位表示正負,也就是符号位,1為負,0為正數。而計算機存儲負數的時候是用補碼的形式的。

主題來了,為啥byte轉int時候要&0xff呢

因為byte再轉int的時候,自身會按照符号位高位補24位

如-127 補碼是10000001

為了轉int

11111111 11111111 11111111 10000001

這個補碼和原來的已經不一緻了,雖然這樣子的int轉回byte還是10000001(int轉byte會去掉高位的24位),但為了保證補碼的一緻是以&0xfff

1111111111111111111111111 10000001&11111111=000000000000000000000000 10000001

這樣子因為0會被忽視掉,是以補碼還是10000001

同理byte轉其他也是這樣子的。