首先先了解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轉其他也是這樣子的。