C运算符&&和||的优先级

时间:2018-10-24 07:39:56

标签: c

#include <stdio.h>

int main()
{ 
    int a = -3, b = 2, c = 0, d;
    d = ++a || ++b && ++c;
    printf("%d %d %d %d", a, b, c, d);
    return 0;
}

程序的输出为:

-2 2 0 1

编译器正在评估AND(||之前的OR(&&)运算符,但AND(&&)运算符的运算符优先级高于OR(||)。

请说明为什么会发生这种情况。

1 个答案:

答案 0 :(得分:3)

正因为&& has more precedence than ||,所以声明:

d = ++a || ++b && ++c;

等效于:

d = ++a || (++b && ++c);

现在,++a首先被评估和测试(由于运算符||的{​​{3}}规则)。最终是-2

由于它非零,所以结果为true(1)。因此,由于++b && ++c运算符的快捷方式,计算表达式(||)的另一部分。

因此,d被分配了1