Zichenya 发表于 2020-2-20 08:54:05

表达式运算顺序问题

a< 1&&--a>1
这个表达式,a=3的话,最后结果a不是等于2嘛?
跟自减优先级高些吧?

良弓无箭 发表于 2020-2-20 09:03:55

&&是逻辑运算符,&&两边都成立,整个表达式才成立,a< 1&&--a>1因为你让a=3,a就不小于1了,a小于1就不成立,整个表达式就不成立,编译器就不会看后面的--a>1了。这就是传说中的短路。

Zichenya 发表于 2020-2-20 10:40:36

良弓无箭 发表于 2020-2-20 09:03
&&是逻辑运算符,&&两边都成立,整个表达式才成立,a< 1&&--a>1因为你让a=3,a就不小于1了,a小于1就不成立 ...

那自减不是优先级高一些嘛?

良弓无箭 发表于 2020-2-20 10:52:36

#include<stdio.h>
int main()
{
        int a=3;
        --a>1&&a<1;
        printf("%d",a);
}
这样的结果是2;
#include<stdio.h>
int main()
{
        int a=3;
        a<1&&--a>1;
        printf("%d",a);
}
这样的结果是三。
总的来说,自减的优先级虽高,但&&是从左到右执行的。先处理左边的表达式,在处理右边的表达式。
页: [1]
查看完整版本: 表达式运算顺序问题