为什么我可以在Integer的MAX_VALUE中加一



为什么我可以在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说:

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

相关内容

  • 没有找到相关文章

最新更新