看到我有一个像这样的代码
int main () {
uint32_t i ;
for(i=4;i>=0;i--)
printf("i is %d \n",i);
return 0;
}
它进入无限循环。 为什么我的价值低于0&仍然循环去执行?
答案 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。