为什么这个for循环进入无限循环执行?

时间:2011-09-26 06:52:35

标签: c for-loop

看到我有一个像这样的代码

int main () {
    uint32_t i ;
    for(i=4;i>=0;i--)
            printf("i is %d \n",i);

    return 0;
}

它进入无限循环。 为什么我的价值低于0&仍然循环去执行?

3 个答案:

答案 0 :(得分:11)

uint32_t表示无符号整数,因此其值始终为> = 0 - 因此您的循环无限执行。

请注意,许多编译器会发出警告,指示i>=0比较始终为真。

答案 1 :(得分:6)

您在printf中看到了负值,因为您将其打印为%d,但在条件允许的情况下,uint32_t始终为正(您正在执行溢出)。

答案 2 :(得分:1)

您正在使用uint32_t表示无符号然后检查for循环中的条件i> = 0所以当循环执行值i = 0然后它使i = -1但是我是无符号所以它将使i INT_MAX的值(您的系统支持的内容)。所以仍然值大于0所以条件是真的。

关于如何打印i的负值的答案是,您使用的是用于签名的'%d'。

如果要查看结果,可以使用'%u'选项,这样它将打印i的原始无符号值。

如果你想从程序中得到你想要的结果,那么在条件检查时尝试将uint转换为int。