isolation 发表于 2019-1-25 18:31:08

逻辑运算符优先级的问题

#include<stdio.h>
    main()
    {

      int a=0,b=0,c=0;

      if (++a || ++b && ++c)

            printf("%d,%d,%d ", a, b, c);

    }
这段代码的结果是1,0,0。但是运算关系里面不是&&大于||吗?为什么不是先算++b&&++c呢,而是先判断++a为非0就判为真呢

人造人 发表于 2019-1-25 18:41:00

因为&&比||优先级高,所以就变成了这样
#include <stdio.h>
int main(void)
{
        int a = 0, b = 0, c = 0;
        if(++a || (++b && ++c))
                printf("%d,%d,%d ", a, b, c);

        return 0;
}

Mountain_gs 发表于 2019-1-25 18:43:53

短路了,或前面的表达式为真或者与前面的表达式为假,后面的表达式就不会再计算了

人造人 发表于 2019-1-25 18:48:00

"为什么不是先算++b&&++c"
因为“++b&&++c”在运算符||的右边

人造人 发表于 2019-1-25 18:48:59

运算符||从左到右计算

行客 发表于 2019-1-25 18:49:53

已经说的很清楚了。

isolation 发表于 2019-1-25 19:01:27

人造人 发表于 2019-1-25 18:41
因为&&比||优先级高,所以就变成了这样

这个括号一加我就懂了。谢谢啦!
页: [1]
查看完整版本: 逻辑运算符优先级的问题