为什么这个无限循环在一段时间后终止了?

4

我在运行这个无限 for 循环。为什么这个 for 循环会在一段时间后终止?

for(int i = 10; i > 0; i++) { }

但是如果我在这个 for 循环中打印一些内容,那么它就不会停止。为什么会这样?


检查这个解决方案是否适用于您的问题: https://dev59.com/RVgQ5IYBdhLWcg3w9Ykb#44376523 - Oghli
2个回答

13

int 变量达到 2,147,483,647 时会发生环绕,变成 -2,147,483,648。

这会导致条件语句 i > 0 结果为false

在Java中,这是完全定义良好的行为:但在C或C++中不能这样做。

如果您尝试在循环中打印输出内容,则循环速度会大大降低,您可能需要耐心等待。将当前值的 i 合并到输出中,自己看看吧:即使每秒输出 1,000 次,也需要近一个月才能达到环绕点!


那么为什么当你打印东西时它不停止呢? - VK321
2
我已经添加了那个。它最终会停止。 - Bathsheba
好的答案!这将证明你的答案:https://dev59.com/RVgQ5IYBdhLWcg3w9Ykb#44376523 - Oghli

1
整数算术运算以32位精度执行。当操作的结果值大于32位(int变量可以容纳的最大大小)时,仅考虑低32位,并且高位比特被丢弃。当MSB(最高有效位)为1时,该值被视为负数。在您的情况下,当它变为负数并且条件为false时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接