首页新闻找找看学习计划

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

0
悬赏园豆:10 [已解决问题] 解决于 2019-03-02 16:59

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

我的理解:

=优先级高于!=,所以表达式等价于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(按照优先级的概念,有点理解不了了)

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

望解答

蓝海人的主页 蓝海人 | 初学一级 | 园豆:52
提问于:2019-03-01 20:15
< >
分享
最佳答案
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条件都是从左往右执行,只是第一个只有一个逻辑判断条件,让你以为执行的顺序是安装优先级执行的。
而第二个有三个逻辑判断条件,很显然是从左往右依次执行。

收获园豆:10
Shendu.CC | 小虾三级 |园豆:1811 | 2019-03-02 09:41

意思是优先级与运算顺序无关吗?

蓝海人 | 园豆:52 (初学一级) | 2019-03-02 14:40

@蓝海人: 优先级真正作用仅用于确定运算符和哪些子表达式结合 而已

Shendu.CC | 园豆:1811 (小虾三级) | 2019-03-02 14:46
其他回答(1)
0

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

迪格拉斯 | 园豆:202 (菜鸟二级) | 2019-03-02 00:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册