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_VALUE
is -2^31
和Integer.MAX_VALUE
is
2^31-1
,因此-Integer.MIN_VALUE
is 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