我希望看到四个变量的值(基本上检查逻辑运算符的优先顺序)。
#include<stdio.h>
int main()
{
int a=0, b=-7, c=0, d;
d = ++c || ++a && ++b ;
printf("\n %d %d %d %d",a,b,c,d);
}
我希望结果为'0 -6 1 1',但实际输出为'0 -7 1 1'。任何人都可以在显示的输出后面给出解释吗?
答案 0 :(得分:2)
首先看看Operator Precedence。
然后,关于逻辑OR运算符的工作,请参见C11
,第6.5.14章(强调我的)
[...]
||
运算符保证从左到右的评估;如果 评估第二个操作数,第一个评估之间有一个序列点 和第二个操作数。 如果第一个操作数比较不等于0,则第二个操作数为 未评估。
以及结果:
如果
||
运算符的两个操作数都不等于1
,则应产生0
;否则 产生0
。结果的类型为int
。
所以,在您的代码中
d = ++c || ++a && ++b ;
与
相同 d = (++c) || (++a && ++b);
计算结果为
d = 1 || (++a && ++b); // short circuit, RHS not evaluated
最终与
相同d = 1; // 1 is not the value computation of `++c`, rather result of the `||` operation.