C++操作符的优先级 及其记忆方法
优先级 | 操作符 | 描述 | 例子 | 结合性 |
---|---|---|---|---|
1 |
() [] -> . :: ++ -- |
调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 |
(a + b) / 4; array[4] = 2; ptr->age = 34; obj.age = 34; Class::age = 2; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... |
从左到右 |
2 |
! ~ ++ -- - + * & (type) sizeof |
逻辑取反操作符 按位取反(按位取补) 前置自增操作符 前置自减操作符 一元取负操作符 一元取正操作符 解引用操作符 取地址操作符 类型转换操作符 返回对象占用的字节数操作符 |
if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; data = *ptr; address = &obj; int i = (int) floatNum; int size = sizeof(floatNum); |
从右到左 |
3 |
->* .* |
在指针上通过指向成员的指针访问成员的操作符 在对象上通过指向成员的指针访问成员的操作符 |
ptr->*var = 24; obj.*var = 24; |
从左到右 |
4 |
* / % |
乘法操作符 除法操作符 取余数操作符 |
int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; |
从左到右 |
5 |
+ - |
加法操作符 减法操作符 |
int i = 2 + 3; int i = 5 - 1; |
从左到右 |
6 |
<< >> |
按位左移操作符 按位右移操作符 |
int flags = 33 << 1; int flags = 33 >> 1; |
从左到右 |
7 |
< <= > >= |
小于比较操作符 小于或等于比较操作符 大于比较操作符 大于或等于比较操作符 |
if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... |
从左到右 |
8 |
== != |
等于比较操作符 不等于比较操作符 |
if( i == 42 ) ... if( i != 42 ) ... |
从左到右 |
9 | & | 按位与操作符 | flags = flags & 42; | 从左到右 |
10 | ^ | 按位异或操作符 | flags = flags ^ 42; | 从左到右 |
11 | | | 按位或操作符 | flags = flags | 42; | 从左到右 |
12 | && | 逻辑与操作符 | if( conditionA && conditionB ) ... | 从左到右 |
13 | || | 逻辑或操作符 | if( conditionA || conditionB ) ... | 从左到右 |
14 | ? : | 三元条件操作符 | int i = (a > b) ? a : b; | 从右到左 |
15 |
= += -= *= /= %= &= ^= |= <<= >>= |
赋值操作符 复合赋值操作符(加法) 复合赋值操作符(减法) 复合赋值操作符(乘法) 复合赋值操作符(除法) 复合赋值操作符(取余) 复合赋值操作符(按位与) 复合赋值操作符(按位异或) 复合赋值操作符(按位或) 复合赋值操作符(按位左移) 复合赋值操作符(按位右移) |
int a = b; a += 3; b -= 4; a *= 5; a /= 2; a %= 3; flags &= new_flags; flags ^= new_flags; flags |= new_flags; flags <<= 2; flags >>= 2; |
从右到左 |
16 | , | 逗号操作符 | for( i = 0, j = 0; i < 10; i++, j++ ) ... | 从左到右 |
问题:如何记住运算符的15种优先级和结合性?
解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。
如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。
结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。
优先级有15种。记忆方法如下:
记住一个最高的:构造类型的元素或成员以及小括号。
记住一个最低的:逗号运算符。
剩余的是一、二、三、赋值。
意思是单目、双目、三目和赋值运算符。
在诸多运算符中,又分为:
算术、关系、逻辑。
两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:
算术运算符分 *,/,%高于+,-。
关系运算符中,〉,〉=,<,<=高于==,!=。
逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。
逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。
这样就将15种优先级都记住了,再将记忆方法总结如下:
去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。
C++操作符的优先级 及其记忆方法相关推荐
- 详解:操作符的优先级
前言: 复杂表达式的求值有三个影响的因素. 1. 操作符的优先级 2. 操作符的结合性 3. 是否控制求值顺序 两个相邻的操作符先执行哪个?取决于他们的优先级.如果两者的优先级相同,取决于他们的结合性 ...
- C/C++操作符的优先级和结合性问题浅析
两个相邻操作符的执行顺序由它们的优先级决定.例如: a + b*c,在这个表达式中,乘法和加法操作符是两个相邻的操作符,由于乘法的优先级比加法高,所以乘法运算先于加法运算执行.编译器在这里别无选择,它 ...
- 世界公认最好的记忆方法_世界记忆大师:6种简单实用记忆方法,让孩子成为学霸中学霸...
绝大部分成绩好的孩子,都是与记忆力好坏相关,而成绩差的孩子也付出了相应的努力,但就是怎么学都学不好.当然了,这个世界是没有笨小孩,只要坚定信心,每天坚持记忆方法训练,每个孩子都可以成为一名学霸中的学霸 ...
- 关于C语言运算符优先级的记忆技巧是什么?
关于C语言运算符优先级的记忆技巧是什么? (1)先(括号)内层,后(括号)外层. (2)先函数,后运算. (3)先算术,后关系,再逻辑. (4)先乘除,后加减. (5)先左,后右. (6)搞不清,加括 ...
- 学习方法之04提取练习,永远都不会忘的记忆方法
学习方法之04提取练习,永远都不会忘的记忆方法 前言 最近在复习准备秋招,总觉得效率不高,可能学习方式哪里出了问题,思考了一下,决定先学习正确的学习方式(是否真的正确还有待).在网上找了个学习方法教程 ...
- 学习方法之02掌握记忆方法,在学习上就赢了一半
学习方法之02掌握记忆方法,在学习上就赢了一半 前言 最近在复习准备秋招,总觉得效率不高,可能学习方式哪里出了问题,思考了一下,决定先学习正确的学习方式(是否真的正确还有待).在网上找了个学习方法教程 ...
- python优先级排序_Python实现一个优先级队列的方法
问题 怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 解决方案 下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq ...
- linux 命令 记忆方法,linux 记忆命令心得
新开始学linux,要记住很多的命令,毕竟这是linux的根本,没有这些命令,连操作都没办法进行.所以我写这个的目的是我自己记忆,也是想帮助一下一同学习linux的同学们,提供自己记忆这些的方法,抛砖 ...
- cont char *p 和 char* const p 区别及记忆方法
/* cont char *p 和 char* const p 区别及记忆方法 const char *p = "hello"; 和 char const *p = "h ...
最新文章
- python怎样实现封装_python 封装底层实现原理
- B2C电子商务系统研发——商品SKU分析和设计(一)
- 如何合理的规划jvm性能调优
- 信息学奥赛一本通 1054:三角形判断 | OpenJudge NOI 1.4 16
- python if else_菜鸟笔记015 Python If ... Else
- 前端工程师如何与设计师合作能提高效率
- 各种波形文件(wlf/vcd/fsdb/shm/vpd)的区别及生成方法(转)
- Delphi 源码格式书写规范
- 内存优化——使用pandas读取千万级数据
- linux终端ANSI转义字符
- 图书销售系统需求分析获取
- 荣耀9igoogle模式_将iGoogle设为Microsoft Outlook中的启动页
- Android通过百度api地址经纬度获取文字位置信息
- PHP实现匿名聊天室
- 二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#
- android allapp图标拖动,RecyclerView 拖拽移动,长按小图标拖拽,侧滑删除
- “福鼎一杯”:“一杯严选”与“茶人的栖息地”——见茶卸甲 | AiHi资讯
- Debug签名时候数据正常正式签名的时候数据不正常,不显示,或者数据错乱问题
- Java 内部类简介,理解,特点,注意事项
- 京东自动抢茅台脚本(亲测可用,文末有新年礼物)
热门文章
- 解决svn错误:post-commit hook failed (exit code 1) with output
- 广州技术沙龙第 4 期报名开始!
- 【数据结构与算法】之深入解析“不同路径II”的求解思路与算法示例
- 我的Go+语言初体验--Go+之环境安装与程序编码初体验
- 404. Sum of Left Leaves 左叶子之和
- 10.1.3 标签分类与嵌套
- Ubuntu + pip + Python3 + CPU版本 PaddlePaddle 安装
- Host key verification failed.
- 无人机飞控开发平台培训理论课程——MSP430最小系统
- 排序算法 —— 选择排序