C中y = x ++ <= 2的含义是什么?

Kru*_*nal 3 c for-loop

我在C语言中有以下代码片段.

int main()
{
    int x = 1, y = 1;
    for( ; y ; printf("%d %d  ", x, y))
    {
        y = x++ <= 2;
    }
    printf("\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了类似的输出

2  1
3  1
4  0
Run Code Online (Sandbox Code Playgroud)

我不明白输出和含义y = x++ <= 2.

Ian*_*Ian 10

y = x++ <= 2由2部分组成:(1)x++和(2)分配y = ...

x++只是意味着后增量:你拿的价值x,然后你增加x1.

赋值y = ...将y的值设置为1(如果x++ <= 2为true)或0(如果x++ <= 2为false)

现在棘手的部分是你的for-loop:

for( ; y ; printf("%d %d  ", x, y))
Run Code Online (Sandbox Code Playgroud)

请注意,在你for-loopprintf("%d %d ", x, y)(增量条件)将被打印出来后,每个回路.

并注意终止条件;y;,这意味着只要y is 1您将保持在循环中.结合它们,你得到的结果是:

2 1 3 1 4 0
Run Code Online (Sandbox Code Playgroud)

顺序看起来像这样:

//first x = 1, y = 1
y = x++ <= 2; //x = 1 <= 2 returns 1, x++, x becomes 2, y becomes 1
printf("%d %d  ", x, y)// you get your first 2 1
y = x++ <= 2; //x = 2 <= 2 returns 1, x++, x becomes 3, y becomes 1
printf("%d %d  ", x, y)// you get your 3 1
y = x++ <= 2; //x = 3 <= 2 returns 0, x++, x becomes 4, y becomes 0
printf("%d %d  ", x, y)// you get your 4 0
Run Code Online (Sandbox Code Playgroud)


wes*_*ton 7

y = x++ <= 2;
Run Code Online (Sandbox Code Playgroud)

相当于:

if (x <= 2)
  y = 1;
else
  y = 0;

x++;
Run Code Online (Sandbox Code Playgroud)


ame*_*yCU 6

 y = x++ <= 2;
Run Code Online (Sandbox Code Playgroud)

此表达式检查是否x<=2并将结果赋值给y并递增x.随着后增量运算符x递增但使用其原始值.

如果x<=2那么y=1否则y=0,增量x和打印xy,直到y变成0.