理解for循环的退出条件

Lol*_*sho 6 c syntax loops for-loop

读完这个帖子后我有了这个问题用C打印一个二进制表示形式的int

在用户注释中,他们发布了for循环,它为位位置分配1或0,以便从int decimal转换为char*binary.

for(; bits--; u >>= 1)
    str[bits] = u & 1 ? '1' : '0';
Run Code Online (Sandbox Code Playgroud)

我理解为什么不需要初始值.这是我一直都知道的for循环的语法:

for ( variable initialization; condition; variable update )
Run Code Online (Sandbox Code Playgroud)

我不明白的是'bit--'如何成为退出条件.请帮助我理解这段代码是如何工作的(我测试了它,它是有效的).

谢谢.

Cha*_*via 9

在C中,零值在布尔上下文中计算为"false".因此,当在循环的上下文中bits--求值时0,它的计算结果为"false"并终止循环.

如果你说,例如:

int x = 1;
if (--x)
{
  printf("True!\n");
}
else
{
  printf("False!\n");
}
Run Code Online (Sandbox Code Playgroud)

它将输出"False",因为--x计算结果为0,在布尔上下文中为"false".

  • 查尔斯,你是对的,但是-x和x--不一样.如果您将上面的代码更改为x--,它将打印"True!". (4认同)