C语言运算符优先级是否就是运算顺序?

2019-03-02 16:28发布

问题:

最近在做题时对运算符优先级有些疑惑

我的理解:

=优先级高于!=,所以表达式等价于a != (3 >= 1),先执行3>=1为真,返回值为1,
再执行a != 1为假,返回值为0,运行结果不打印

上面运算顺序还能看懂,但后面的代码的运算顺序有点理解不了··

我的理解:
&&的优先级高于||,所有表达式等价于a++ || (b++ && c++),应该先执行b++ != 0为假,c++不执行,再执行a++ != 0为真,输出结果应该为a = 2, b = 1, c = 0

实际运行结果却是a = 2, b = 0, c = 0(按照优先级的概念,有点理解不了了)

最后还有一道运算顺序的题也不太清楚怎么看运算顺序

望解答

回答1:

if(a != 3 >= 1)

这个表达式根据逻辑运算符优先级相当于

if(a!=(3>=1))

运算过程是:从左往右,
第一步 a != 表达式
第二步 计算表达式的值
第三步 返回结果。

因为(3>=1)是 第一个逻辑判断条件(a!=xxx)的一部分(实际上只有一个逻辑判断条件),所以从左往右的第一个逻辑表达式的判定,是需要计算(3>=1)

而你后面的

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

相当于

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

第一个逻辑判断条件 a++也就是 if(a++) 判断为真,立刻跳出 if,后面的也就不会执行。

所以上面两个if条件都是从左往右执行,只是第一个只有一个逻辑判断条件,让你以为执行的顺序是安装优先级执行的。
而第二个有三个逻辑判断条件,很显然是从左往右依次执行。



回答2:

第二个是因为前面的是真的。或运算有一个为真结果就为真所以后面不用进行运算。