循环
int r = 10;
for(int h=0;h<r;h--)
{
r--;
}
out.print(r);
输出为-2147483639。我不确定为什么循环不会无限重复,我无法弄清楚输出数字的重要性(除了它接近int MIN_VALUE的事实)。究竟发生了什么?
答案 0 :(得分:1)
rescrop
从r,h
开始,然后每次迭代都向下计数1,例如10,0
,9,-1
以及。
最终,8,-2
到达h
,即Integer.MIN_VALUE
,然后r=-2147483638, h=-2147483648
下溢并变为int
,此时r=-2147483639, h=2147483647
成为h<r
false
,循环结束。
结果:-2147483639
注意:如果您将int
更改为long
,则仍会发生下溢,只需要花费更长的时间。
答案 1 :(得分:1)
除溢出外,还有算术下溢。在您的情况下,h
的值在r
之前下溢(此时为Integer.MAX_VALUE
),因此h
大于r
并且循环结束。
int r = Integer.MIN_VALUE;
System.out.println(r);
r--;
System.out.println(r);
输出
-2147483648
2147483647