我在https://www.onlinegdb.com/
上尝试了以下代码在Mac上也试过了。
无法找出为什么strangeForLoop中的for循环在i等于0时不会停止?
#include <stdio.h>
#include <stdint.h>
void strangeForLoop();
void normalForLoop();
const uint32_t COUNTDOWN = 3;
int BREAK = -2;
int main()
{
strangeForLoop();
printf("n===========n");
normalForLoop();
return 0;
}
void strangeForLoop() {
for(uint32_t i = COUNTDOWN; i>=0; i--) {
printf("strange i : %dn", i);
if (i == 0)
printf("--> i: %dn", i);
if (i == BREAK) break;
}
}
void normalForLoop() {
for(int i = COUNTDOWN; i>=0; i--) {
printf("normal i : %dn", i);
if (i == 0)
printf("==> i: %dn", i);
if (i == BREAK) break;
}
}
任何帮助都将非常感激。
i
为无符号整数。这样的uint
只能表示正值和零;
[0, 1, 2, 3, ... 2^number_of_bits - 1]
当操作将一个整型值减小到0以下或大于其最大值时,将发生整数溢出。
在此代码的情况下,它将绕到整数的最大值,因此条件i >= 0
将始终保持为真,并且循环永远不会停止。