java中byte类型作计算,都会先转换成int类型再计算。 比如 byte b = 127 + 1;//这样写报错:Type mismatch: cannot convert from int to byte 所以必须强制类型转换: byte b = (byte) (127 + 1); 因此就能理解为什么是-128了: int型的127在计算机内的二进制是: 0000 0000 0000 0000 0000 0000 0111 1111 加1后变成: 0000 0000 0000 0000 0000 0000 1000 0000 即128 强制转换后截取低8位变成 1000 0000 这是byte类型-128的补码。
上面的你们说的都是原码在加减,计算机中的计算是原码间的进行还是补码之间进行运算啊??谢谢啦
楼上讲的到是挺详细的,byte字节占8位,127+1就溢出了,计算机进行运算时,以补码形式进行运行,最前面一位是符号位,所以就变成-128了
这是二进制相加减的溢出问题
62,635
社区成员
307,269
社区内容
加载中
试试用AI创作助手写篇文章吧