字节a = 123;字节b = 5字节c =(字节)(a + b);给出-128。为什么会这样呢?

时间:2018-11-04 17:31:23

标签: java binary decimal twos-complement

https://www.ideone.com/gYreaO,为什么会这样呢?为什么要用二进制补码显示值?

byte a=123;
byte b=5;
byte c=(byte)(a+b);
System.out.println(c);

3 个答案:

答案 0 :(得分:2)

一个byte的{​​{1}}可以保存8bit个值,前2^8 = 256个值,7b个符号方式:

1b

当您身为2-complement并执行-128, -127, ... 0, 1, 2 ..., 126, 127 时,由于进行二元运算,它将返回范围的第一个值

127

Code demo


+1完全相同,当您到达01111110 126 01111111 127 10000000 -128 10000001 -127

int

答案 1 :(得分:1)

字节范围是-128到127。这是当您将一个字节添加到最大字节范围时发生的情况:

any

请注意,最左边的位是符号位,并且由于设置了符号位,因此可以通过二进制补码获取变量的值。

答案 2 :(得分:1)

byte数据类型具有最小值-128(=-2^7)和最大值127(=2^7-1)
加法(a+b)产生结果:
128(数据类型为10000000的二进制int),因为它已转换为int
但是强制转换(byte)(a+b)会将其压缩回1个字节,您会得到
-12810000000数据类型为二进制byte)。