这个问题在这里已经有答案了:
java是如何处理整数下溢和溢出的?您将如何检查它(12个答案)11个月前关门了。我认为下面的代码不会编译。但运行后,我得到了意想不到的结果,我不明白它是如何打印 -2 ? 你能解释一下加法是怎么做的吗?
-2
int x = 2147483647+2147483647; // it compiles System.out.print(x); // prints -2
欢迎解释
vhmi4jdf1#
简而言之:当java整数达到最大值加1时,它们又从最小值开始。就像绕圈子一样。这是因为整数的技术表示是位。想象一下用3位来表示一个数字。你可以打111号。如果你给它加1,你会得到1000,但因为你只有3位可用,它切断了第一位,你会得到000,这就是为什么你在最大值加1后又是最小值。
1条答案
按热度按时间vhmi4jdf1#
简而言之:当java整数达到最大值加1时,它们又从最小值开始。就像绕圈子一样。
这是因为整数的技术表示是位。想象一下用3位来表示一个数字。你可以打111号。如果你给它加1,你会得到1000,但因为你只有3位可用,它切断了第一位,你会得到000,这就是为什么你在最大值加1后又是最小值。