非典型环路输出



对于循环

int r = 10;
for(int h=0;h<r;h--)
{
    r--;
}
out.print(r);

输出为 -2147483639。我不确定为什么循环不会无限重复,而且我无法完全弄清楚输出数字的重要性(除了它接近 int MIN_VALUE 的事实(。到底发生了什么?

r,h 开始10,0,然后每次迭代都倒计时 1,例如 9,-18,-2等等。

最终,h达到Integer.MIN_VALUE,即 r=-2147483638, h=-2147483648,在它下溢int并变得r=-2147483639, h=2147483647之前,此时h<r变得false,循环结束。

结果:-2147483639

注意:如果您将int更改为long,仍然会发生下溢,只是需要更长的时间。

除了溢出,还有算术下溢。在您的情况下,h的值在r之前下溢(此时,它是Integer.MAX_VALUE (,因此h大于 r 并且循环结束。

int r = Integer.MIN_VALUE;
System.out.println(r);
r--;
System.out.println(r);

输出为

-2147483648
2147483647

最新更新