前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有关operator的precedence和associativity

有关operator的precedence和associativity

作者头像
KINGYT
发布2023-03-15 13:35:47
2980
发布2023-03-15 13:35:47
举报

基本概念:

1. 表达式是由运算符及其操作码组成

2. 表达式的计算就是对这些运算符的计算(运算符的计算对象就是其操作码),所有计算的结果作为该表达式的结果

3. 当一个表达式中有多个运算符时,先根据运算符的优先级,计算对应的运算符,再根据结合性,决定是从左到右计算剩余同一优先级运算符,还是从右到左

概念细化:

1. 优先级是对运算符而言,而结合性是对操作码而言,优先级解决的问题是,先计算哪个运算符,结合性解决的问题是,当一个操作码的左右两边都有运算符,且优先级相同时,该操作码属于哪个运算符

2. 同一优先级的运算符一定有相同的结合性,所以,在由同一优先级组成的表达式中,如果表达式是左结合性,那操作码就是属于其左边运算符的操作码,也就是说,表达式从左到右计算。如果是右结合性,操作码就是属于右边的运算符,也就是说,从右往左计算

例子:

表达式1: a + b * c / d - e

此表达式中有4个运算符,其中*/优先级高于+-,所以上面的表达式等价于 a + (b * c / d) - e,又因为*/和+-两组运算符的优先级都各自相同,且结合性都是left-to-right,所以最终为:(a + ((b * c) / d)) - e

表达式2: a == b != c

此表达式中有两个运算符,优先级相同,结合性是left-to-right,所以等价于(a == b) != c

表达式3: a = b = c + d

此表达式中有三个运算符,其中+优先级最高,所以先转化为 a = b = (c + d),此时剩余两个运算符,且优先级相同,但结合性为right-to-left,所以最终等价于 a = (b = (c + d))

中英对照:

运算符:operator

操作码:operand

优先级:precedence

结合性:associativity

Reference:

https://en.wikipedia.org/wiki/Operator_associativity

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卯时卯刻 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档