#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 ( ||
) 之前。
请解释为什么会发生这种情况。
最佳答案
正是因为 &&
has more precedence than ||
,声明:
d = ++a || ++b && ++c;
相当于:
d = ++a || (++b && ++c);
现在,首先评估和测试 ++a
(由于运算符 ||
的 evaluation order 规则)。最终结果是 -2
。
由于它非零,因此结果为 true (1
)。因此,由于 ||
的快捷方式机制,表达式的另一部分 (++b &&++c
) 不会被计算。 > 运算符。
因此,d
被分配为 1
。
关于C 运算符 && 和 || 的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52963371/