【问题标题】:why this for loop goes in infinite loop executation?为什么这个for循环进入无限循环执行?
【发布时间】:2011-09-26 17:07:14
【问题描述】:

看到我有一个这样的代码

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

    return 0;
}

它进入无限循环。 为什么 i 的值低于 0 并且循环仍然会执行?

【问题讨论】:

  • 你如何期望 unsigned 类型的值低于零???
  • @AndreyT:你发炎了 AndreyT 吗? ;-)

标签: c for-loop


【解决方案1】:

uint32_t 表示 unsigned 整数,因此它的值始终 >= 0 - 因此您的循环将无限执行。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      如果您想查看结果,可以使用 '%u' 选项,它会打印 i 的原始无符号值。

      如果您想从程序中获得所需的结果,请尝试在条件检查时将 uint 强制转换为 int。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多