以下代码在infinte循环中运行.'i'已经使用值1进行初始化,然后与0进行比较.
所以printf()stmt应该执行一次,但它运行infinetly.
unsigned int i = 1;
for (; i >= 0; i--) {
printf("Hello: %u\n",i);
}
Run Code Online (Sandbox Code Playgroud)
请解释一下这种行为.
Ric*_*dle 10
因为i是unsigned它不能去否定,所以i>=0始终是真实的.
如果i是零,你这样做i--,值i包裹轮的最大价值unsigned int可以有(其中大于零).
您应该通过删除unsigned修饰符来使用有符号整数.
正如其他答案所说,这是因为它没有签名而且全部.我会告诉你一个优雅的方式做你想要做什么用的无符号整数.
unsigned int i=10;
while(i --> 0) printf("Hello:%u\n", i+1);
Run Code Online (Sandbox Code Playgroud)
这-->是因为中有时去操作.但它实际上只是--和>.如果你改变了间距,你就会得到
while( i-- > 0 )
Run Code Online (Sandbox Code Playgroud)
MY2C