非典型循环输出

时间:2016-02-15 03:30:18

标签: java loops for-loop

循环

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

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

2 个答案:

答案 0 :(得分:1)

rescropr,h开始,然后每次迭代都向下计数1,例如10,09,-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