以下代码段中b的值应该是什么?为什么? '-6'或'-7'

时间:2019-05-27 08:10:54

标签: c

我希望看到四个变量的值(基本上检查逻辑运算符的优先顺序)。

#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'。任何人都可以在显示的输出后面给出解释吗?

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.