首先先了解
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转其他也是这样子的。
java中byte转int时候为什么要&0xff
最新推荐文章于 2023-07-28 14:50:38 发布