为什么在C中永远倒数一个unsigned int循环?

Ang*_*gus 5 c loops for-loop

以下代码在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

因为iunsigned它不能去否定,所以i>=0始终是真实的.

如果i是零,你这样做i--,值i包裹轮的最大价值unsigned int可以有(其中大于零).

您应该通过删除unsigned修饰符来使用有符号整数.


Arm*_*yan 7

正如其他答案所说,这是因为它没有签名而且全部.我会告诉你一个优雅的方式做你想要做什么的无符号整数.

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

  • 只要把它写成`(而i--> 0)`除非你的目标是混淆. (7认同)
  • @Armen:对于粗心的读者来说,这意味着该语言有一个" - >"运算符. (5认同)