Java Integers Min_Value负数然后比较

明天我要进行考试,但我听不懂书中的解释,感谢您的帮助:

public class TestClass{

public static void main(String[] args) throws Exception{

int a = Integer.MIN_VALUE;

int b = -a;

System.out.println( a+ " "+b);

}

}

输出: -2147483648 -2147483648

为什么这会打印两个大小相同的负数而不是正负数?

回答:

由于无声整数溢出:Integer.MIN_VALUEis -2^31Integer.MAX_VALUEis

2^31-1,因此-Integer.MIN_VALUEis 2^31,即is Integer.MAX_VALUE +

1,根据定义,它对于整数而言太大。因此它溢出并变成Integer.MIN_VALUE

您还可以检查:

System.out.println(Integer.MAX_VALUE + 1);

打印相同的东西。

从技术上讲,结果由Java语言规范#15.18.2定义:

如果整数加法溢出,则结果是数学和的低阶位,以某种足够大的二进制补码格式表示。如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同。

以上是 Java Integers Min_Value负数然后比较 的全部内容, 来源链接: utcz.com/qa/422810.html

回到顶部