理解for循环的退出条件

时间:2012-02-09 00:56:20

标签: c loops syntax for-loop

在阅读此帖子Print an int in binary representation using C

后,我有了这个问题

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

for(; bits--; u >>= 1)
    str[bits] = u & 1 ? '1' : '0';

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

for ( variable initialization; condition; variable update )

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

谢谢。

4 个答案:

答案 0 :(得分:9)

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

如果您说,例如:

int x = 1;
if (--x)
{
  printf("True!\n");
}
else
{
  printf("False!\n");
}

它将输出“False”,因为--x的计算结果为0,在布尔上下文中为“false”。

答案 1 :(得分:1)

所有条件基本上归结为检查某事物是否为0。 0表示false,其他一切表示true。因此当bits为0时,该循环将会中断。

您有时会看到whileif条件

if (variable) // or while(variable)

这只是

的简写
if (variable != 0) // or while (variable != 0)

所以

for (; bits--; u >>= 1) 

的缩写
for (; bits-- != 0; u >>= 1)

答案 2 :(得分:0)

bits--是int类型的赋值表达式(因为它将返回b的值,即int)。为了匹配for循环语法,它被转换为布尔表达式,这意味着如果bits!= 0则为真。事实上,条件与bits!= 0相同,但是通过使用bits--,它会改变值同时使用位,使代码更紧凑,就是这样。

答案 3 :(得分:0)

正如其他人所说,在C中,您可以将整数用作条件 - 0或false,其他任何内容都用于true。 (实际上,你几乎总是这样做 - 甚至像a<b这样的表达式都是int)

因此,当bits--为0时,循环将结束。

--运算符位于变量之后时,它会减小变量,并获取其先前的值。例如,如果您有int a=3,b; b=a--;,则b将为3,a将为2.

因此,在该位从0减少到-1之后,循环将退出。 这意味着,如果在开头bits==8(例如),循环将迭代8次,当在第一个时,位将是7(因为条件已经检查),并且在最后,位将循环数组的好方法(因为在c中,bits变量数组已从0索引到bits-1)。