byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1 + b2);b1 + b2 的结果是156,已经超出了byte类型的范围
我知道由int转换为byte时会有一个“截”的过程,但不明白这个过程是怎么进行的;
还有,为什么b3最后的值为-100?
菜鸟求救,请高手指点!
byte b2 = 89;
byte b3 = (byte)(b1 + b2);b1 + b2 的结果是156,已经超出了byte类型的范围
我知道由int转换为byte时会有一个“截”的过程,但不明白这个过程是怎么进行的;
还有,为什么b3最后的值为-100?
菜鸟求救,请高手指点!
是因为结果156,已经超出了byte类型的范围 ,128时溢出为-128,156时显然就是-100了。
也就是说当128时,其值应该为-128。
它们之间的差值为-256,显然156的值为-100.
it 32bit直接加的时候不时按照int 32 bit来计算的!
用补码表示:
(67)10 = (0000000000000000000000001000011)2
(89)10 = (0000000000000000000000001011001)2两者相加,得:(0000000000000000000000010011100)2
由于已经超出了byte的范围,截去前面24位,得:(10011100)2将其转化为原码:【10011100】补
= -(【0011100】反 + 1)
= -(1100011 + 1)
= -1100100转化为十进制即为-100