天天看点

为什么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

应该是一样的表示

。但是我们都知道byte占8位,28为256,byte最多可以表示256个不同的数值。

0000 0000

~

0111 1111

128个

1000 0000

1111 1111

如果 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