For Loop - 使用有符号整数比较无符号数

nag*_*esh 4 c for-loop

我试图在for循环中将无符号数与带符号数进行比较,但是在for循环后它没有执行语句,这意味着for循环不起作用,我想.我的代码是:

#include <stdio.h>
int main()
{
   unsigned int i;
   for (i = 8; i >= -1; i--)
     printf ("%d\n", i);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,printf语句没有被执行,所以我的for循环出了什么问题.我们不能将无符号数与有符号数进行比较吗?

Dan*_*her 7

unsigned int i;
for (i = 8 ; i >= -1; i--)
Run Code Online (Sandbox Code Playgroud)

-1转换为无符号类型中的最大值以进行比较.因此,对于unsigned价值观,

i >= -1
Run Code Online (Sandbox Code Playgroud)

只是真的i = UINT_MAX.

要获得预期的输出,最简单的方法是使用有符号整数,例如int.

另一种方法是在循环控制中做一些魔术:

for(i = 8+1; i-- > 0;)
Run Code Online (Sandbox Code Playgroud)

但是如果你这样做,一定要写一个解释不寻常的循环控制代码的注释.