有关operator的precedence和associativity
基本概念:
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
相关文章
- 九年级下册第3章复习《圆的有关概念与性质》
- 有关 C++ 指针(*)和引用(&)区别的小结
- 基于Python的OpenCV有关像素的操作
- Ask Apple 2022 与 SwiftUI 有关的问答(上)
- kali中有关py2和py3的问题(6.10更)
- SQLServer 错误 17067 SQL Server断言:文件: <%s>,行 = %d %s。 此错误可能与时间有关。 如果重新运行该语句后错误仍然存在,请使用 DBCC CHECKDB 来检查数据库的结构是否完整,或重新启动服务器以确保内存中的数据结构未破坏。 故障 处理 修复 支持远程
- 扒一扒这两天有关阿里云经典网络安全性的争论
- Linux系统的研究与应用(有关linux的论文)
- MySQL表函数精确管理您的数据库表格(mysql中与表有关函数)
- 红色理解从Redis词缀中学习(有关redis词缀单词)
- Redis入门实战从实战看懂Redis的强大技术(有关redis的书籍)
- Redis入门教程实践加速数据开发(有关redis书籍)
- 建立自由的会计日期的报表--1.1.认识几个有关时间的函数
- IE之死__原来与CSS有关