c语言运算符优先级讲解,运算符优先级高吗
c语言运算符优先级讲解,运算符优先级高吗
最近在知乎上看到一个c/c++运算符连写的问题,引发了诸多网友的讨论,具体内容如下图:
乍一看,这句代码很长,确实有些让人糊涂,尤其是学习过python的同学,对此写法不太理解,今天我们一起来说一说。
在c语言的表达式中,如果存在多个运算符的时候,需要考虑数据的优先级和结方向的问题,例如:x = a + b * c -d在这个例子中,c语言的处理流程是:
1. 先做乘法b*c,
2. 然后先做加法,后做减法
3. 将计算结果赋值给x
我们验证一下:
1 + 2 *3 -4,结果为3,验证成功!
通过这个例子,我们可以总结如下:对于表达式
a op1 b op2 c ,它的运行逻辑有两种可能性:
1. 如果op1优先级高于op2,则为:(a op1 b) op2 c
2. 如果op2优先级高于op1,则为:a op1 (b op2 c)
如果op1与op2优先级相同,则取决于结方向。所谓结方向指的是"从左右"或"从右左"。
· 赋值运算的结方向为:从右左
· 二元运算符的结方向为:从左右
我们假设 b*c 的值为m,则,
· a + m -d 可以翻译为 (a + m) -d,,结方向是从左右
· x = a + m -d 可以翻译为: x = (a + m -d),结方向是从右左
在C/C++中,所有的运算符都有明确的优先级和结方向定义,具体如下:
铺垫好了知识点,我们回归到最初网友的问题上,x +=5 ==4,
由于==号的优先级大于+=号,所以这句代码的逻辑可以解读为:
1. x += (5 ==4)
2. 即先判断 5 == 4是否成立,此时不成立,返回false,即返回0
3. 然后再计算x+=0,所以最终结果为0。
使用代码验证一下:
执行结果:
可以看到,输出的结果依然为10,说明x添加的值为0,得到验证。
接下来,我们修改一下代码,让两个数字比较值返回true,再次验证一下结果,如下图:
执行结果:
对于这种x +=5 ==4表达式的编码风格,我们在开发中是不建议的,这样写虽然高效简洁、正确运行、看起来很酷,但是存在一个风险,即需要人进一步确认这种表达式是否就是开发人员的真正意图。我们在公司开发的时候,通常是很多同事协同开发,当同事看到这类代码的时候,会产生怀疑,从而增加彼此的沟通成本。我们在编码的时,尽量不要让人产生歧义,如果一定想要写这种风格的代码,我建议加上括号,即:x +=(5 == 4),这样语义更加明确,从而也避免造成同事因揣摩代码而带来的苦恼。
当然,深刻的理解语法是我们必须要做到的,这种代码常见于面试题中,对于考察面试者对语法的理解程度是个不错的选择。
c语言
- 随机文章
- 风儿(风儿轻轻的吹)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 帆船比赛(帆船比赛视频)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 东天目山(东天目山景区)
- 杭同(杭同培训中心怎么样)
- 服饰加盟(服饰加盟店招商)
- 疯狂填字(疯狂填字5)
- 点对点短信息(点对点短信息费是什么意思)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 哈利波特官网(哈利波特官网在哪里)
- 杜星霖(杜星霖图片)
- 广州晓港公园(广州晓港公园正门图片)
- 钢筋等级符号(钢筋等级符号电脑怎么输入)
- 常州天宁寺(常州天宁寺求什么灵验)
- 河源巴伐利亚(河源巴伐利亚庄园)
