为什么我可以在整数的MAX_VALUE中添加一个?

时间:2016-07-21 12:19:57

标签: java integer

为什么我可以添加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;
    }
}

2 个答案:

答案 0 :(得分:4)

您应该考虑以位为单位的数字。累积一位并发生溢出。由于整数是有符号的,因此一位流入用作符号的位。

 01111111 11111111 11111111 11111111 Base10: Integer.MAX_VALUE
+00000000 00000000 00000000 00000001 Base10: 1
____________________________________
=10000000 00000000 00000000 00000000 Base10: -2147483648

答案 1 :(得分:3)

JLS 15.18.2说:

  

如果整数加法溢出,则结果为低位   数学和的位用一些足够大的数字表示   二补码格式。如果发生溢出,则表示符号   结果与两者的数学和的符号不同   操作数值。