为什么我可以在int的最大值上加1?此代码的输出为-2147483648。这不是只有在biggerValue的类型为long时才可能吗?你猜不是吗?
public class Test {
public static void main (String[] args) {
AddOne addOne = new AddOne();
System.out.println("The value of bigger is " + addOne.plusOne());
}
}
class AddOne {
public long plusOne() {
int value = Integer.MAX_VALUE;
int biggerValue = value + 1;
return biggerValue;
}
}
您应该考虑以位为单位的数字。一个比特被累加,就会发生溢出。由于整数是有符号的,一个比特流入用作符号的比特。
01111111 11111111 11111111 11111111 Base10: Integer.MAX_VALUE
+00000000 00000000 00000000 00000001 Base10: 1
____________________________________
=10000000 00000000 00000000 00000000 Base10: -2147483648
JLS 15.18.2说:
如果整数加法溢出,则结果为低位数学和的位,用一些足够大的表示二补格式。如果发生溢出,则结果和这两者的数学和的符号不一样操作数值。