#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(||
)。
请说明为什么会发生这种情况。
答案 0 :(得分:3)
正因为&&
has more precedence than ||
,所以声明:
d = ++a || ++b && ++c;
等效于:
d = ++a || (++b && ++c);
现在,++a
首先被评估和测试(由于运算符||
的{{3}}规则)。最终是-2
。
由于它非零,所以结果为true(1
)。因此,由于++b && ++c
运算符的快捷方式,不计算表达式(||
)的另一部分。
因此,d
被分配了1
。