2011-09-26 248 views
2

看到我有一个这样的代码为什么这个for循环进入无限循环执行?

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

    return 0; 
} 

它会在无限循环。 为什么我的价值低于0 &仍然循环将执行?

+4

您如何期待* unsigned *类型的值低于零? – AnT

+0

@AndreyT:你发炎了AndreyT? ;-) – jason

回答

11

uint32_t意味着无符号的整数,所以它的值总是> = 0 - 因此你的循环无限地执行。

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

+0

嘿它的麻愚蠢的错误...! –

6

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

1

您正在使用uint32_t表示无符号,然后检查for循环中的条件i> = 0,因此当循环执行值为i = 0,然后它使i = -1但我没有签名,所以它会使INT INT的最大值(你的系统支持的)。所以仍然值大于0,所以条件成立。

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

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

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