为什么我可以添加1已经是int的最大值? 此代码的输出为-2147483648。如果largeValue的类型很长,这不可能吗?可能不会?
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;
}
}
答案 0 :(得分:4)
您应该考虑以位为单位的数字。累积一位并发生溢出。由于整数是有符号的,因此一位流入用作符号的位。
01111111 11111111 11111111 11111111 Base10: Integer.MAX_VALUE
+00000000 00000000 00000000 00000001 Base10: 1
____________________________________
=10000000 00000000 00000000 00000000 Base10: -2147483648
答案 1 :(得分:3)
如果整数加法溢出,则结果为低位 数学和的位用一些足够大的数字表示 二补码格式。如果发生溢出,则表示符号 结果与两者的数学和的符号不同 操作数值。