我们假设我们有以下循环:
for (int i = 1; i < 2; i--) { cout << i << endl; }
毫无疑问,这是一个无限的循环.但是,我的问题是,它会运行多长时间?因为我的教授说,鉴于int是4 bytes = 32 bits
,它可以存储一个数字-2147483648 to 2147483647
.鉴于此,他接着说,在一个for循环中,如果它到达其中一个数字,并且循环仍然被编程为继续(就像这个那样),那么数字将变为正数,条件将满足,终止循环.
我的问题恰恰是:这是怎么发生的?为什么数字-2147483648在for循环中变为+2147483648,为什么+2147483648在for循环中变为-2147483648?因为我曾经认为一旦计数器达到2147483649就会发生分段错误.感谢您的回复!
回答你的标题问题; Will an Infinite Loop ever end by Itself
:
没有.
但是你的循环不仅不是无限的,因为for循环条件它甚至不会运行一次.
for (int i = 1; i > 2; i--)
i
,1将永远不会满足循环条件i> 2.
让我们说,虽然你的意思i < 2
,然后答案是,我不知道.整数溢出是未定义的行为C++
(见这里).
在大多数情况下,它会回滚,但由于行为未定义,因此没有必要讨论真正发生的事情.