假设我们有以下循环:
for (int i = 1; i < 2; i--)
{
cout << i << endl;
}
毫无疑问,这是一个无限循环。但是,我的问题是它会运行多长时间?因为我的教授说,给定一个 int 是 4 字节 = 32 位
,它可以存储从 -2147483648 到 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
, at 1 永远不会满足循环条件 i>2。
假设您的意思是 i < 2
,那么答案是,我不知道。整数溢出是 C++
中的未定义行为(see here)。
在大多数情况下它会回绕,但由于行为未定义,因此讨论真正发生的事情没有意义。
我是一名优秀的程序员,十分优秀!