【发布时间】:2017-06-11 09:14:41
【问题描述】:
假设我们有以下循环:
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 就会出现分段错误。感谢您的回复!
【问题讨论】:
-
Without a doubt, this is an infinite for-loop... 毫无疑问,这个循环甚至不会执行一次,因为循环条件i > 2永远不会为真。 -
无限循环将是
while(true) {}。但看起来你的问题实际上是关于整数算术,而不是循环。 -
@TimBiegeleisen 感谢您为我确认这一点。以为我在服用疯狂的药丸。
-
"-2147483648 变成 +2147483648" 真的很奇怪。我希望它变成+2147483647
-
虽然答案是 Fox 先生所说的“谁知道?未定义的行为”,但常见的实现给出了一些关于可能发生的情况的提示。阅读Two's Compliment
标签: c++ for-loop segmentation-fault infinite-loop bits