https://www.ideone.com/gYreaO,为什么会这样呢?为什么要用二进制补码显示值?
byte a=123;
byte b=5;
byte c=(byte)(a+b);
System.out.println(c);
答案 0 :(得分:2)
一个byte
的{{1}}可以保存8bit
个值,前2^8 = 256
个值,7b
个符号方式:
1b
当您身为2-complement
并执行-128, -127, ... 0, 1, 2 ..., 126, 127
时,由于进行二元运算,它将返回范围的第一个值
127
与+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个字节,您会得到
-128
(10000000
数据类型为二进制byte
)。