为什么 for 循环在 strangeForLoop 中不停在 i == 0 处?

  • 本文关键字:for 循环 strangeForLoop c
  • 更新时间 :
  • 英文 :


我在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将始终保持为真,并且循环永远不会停止。

最新更新