看到我有一个这样的代码为什么这个for循环进入无限循环执行?
int main() {
uint32_t i ;
for(i=4;i>=0;i--)
printf("i is %d \n",i);
return 0;
}
它会在无限循环。 为什么我的价值低于0 &仍然循环将执行?
看到我有一个这样的代码为什么这个for循环进入无限循环执行?
int main() {
uint32_t i ;
for(i=4;i>=0;i--)
printf("i is %d \n",i);
return 0;
}
它会在无限循环。 为什么我的价值低于0 &仍然循环将执行?
uint32_t
意味着无符号的整数,所以它的值总是> = 0 - 因此你的循环无限地执行。
请注意,许多编译器将发出警告,指示i>=0
比较始终为真。
嘿它的麻愚蠢的错误...! –
您在printf
中看到负值,因为您将其打印为%d
,但在此情况下,uint32_t
总是正值(您正在执行溢出)。
您正在使用uint32_t表示无符号,然后检查for循环中的条件i> = 0,因此当循环执行值为i = 0,然后它使i = -1但我没有签名,所以它会使INT INT的最大值(你的系统支持的)。所以仍然值大于0,所以条件成立。
对于我如何打印负值的答案是,您使用的是用于签名的'%d'。
如果您想查看结果,您可以使用'%u'选项,以便打印i的原始无符号值。
如果你想从程序中得到你想要的结果,然后尝试在条件检查时将uint转换为int。
您如何期待* unsigned *类型的值低于零? – AnT
@AndreyT:你发炎了AndreyT? ;-) – jason