为什么JAVA中(byte)128结果为-128;(byte)-129结果为127
为什么JAVA中(byte)128结果为-128;(byte)-129结果为127
在JAVA中默认的整型为int型,int型占4个字节,为32位。byte占一个字节为8位。
JAVA中的二进制都是采用补码形式存储:
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,则符号位为1,其余各位是对原码取反,然后整个数加1
int类型的128 原码为0000 0000 0000 0000 0000 0000 1000 0000
当将int类型128转换为byte类型时,发生强制转换,截取了最后8位为
1000 0000
由于第一位代表符号位,按理解应该此处应该表示为-0
与0000 0000
应该是一样的表示0
。但是我们都知道byte占8位,28为256,byte最多可以表示256个不同的数值。
0000 0000
~0111 1111
128个
1000 0000
~1111 1111
128个
如果 byte中0000 0000
和1000 0000
表示0浪费了内存,所以byte中1000 0000
表示-128。
int类型的-129原码为1000 0000 0000 0000 0000 0000 1000 0001
补码为1111 1111 1111 1111 1111 1111 0111 1111
强制转换为byte类型为0111 1111
0111 1111
为正数,值为127