变量与&&和和||

时间:2010-05-02 20:45:51

标签: c boolean-operations

最后一行是什么意思?

a=0;
b=0;
c=0;

a && b++;
c || b--;

你可以用更有趣的例子来解释这个问题吗?

2 个答案:

答案 0 :(得分:10)

对于您提供的示例:如果a非零,则增加b;如果c为零,则递减b

由于short-circuiting evaluation的规则,即。

您也可以使用函数作为右侧参数来测试它; printf对此有好处,因为它为我们提供了易于观察的输出。

#include <stdio.h>
int main()
{
    if (0 && printf("RHS of 0-and\n"))
    {
    }

    if (1 && printf("RHS of 1-and\n"))
    {
    }

    if (0 || printf("RHS of 0-or\n"))
    {
    }

    if (1 || printf("RHS of 1-or\n"))
    {
    }

    return 0;
}

输出:

RHS of 1-and
RHS of 0-or

答案 1 :(得分:1)

a && b++;    is equivalent to:  if(a) b++;

c || b--;    is equivalent to:   if(!c) b--;

但写这些表达没有意义。它不能编译为更好的代码,并且几乎在所有情况下都不太可读,即使它看起来更短。