
在 C/C++ 编程中,理解运算符优先级是避免逻辑错误的基石。正如数学中“先乘除后加减”一样,C++ 将运算符分成了 16 个优先级层级。
为了方便记忆,我们可以将这些运算符分为几个主要组别,按照 从高到低 的顺序排列:
1. 顶级:成员访问与后缀运算符
这些运算符的结合性最强,最先被处理。
():圆括号(函数调用、表达式分组)[]:数组下标->,.:成员访问(指针访问和对象访问)++,--:后缀自增/自减(注意:优先级高于前缀版本)
2. 单目运算符(一元)
这一层级具有“右结合性”(从右向左运算)。
++,--:前缀自增/自减!,~:逻辑非、按位取反*,&:解引用、取地址(type):强制类型转换sizeof:获取类型大小new,delete:动态内存管理
3. 算术运算符
遵循常规数学逻辑,但位移运算在其后。
*,/,%:乘、除、取模+,-:加、减
4. 位移与关系运算符
这是最容易出错的地方,关系运算符优先级高于位运算。
<<,>>:左移、右移<,<=,>,>=:大小比较==,!=:相等/不等
5. 位运算符(按位)
注意:位运算符之间的优先级也是不同的,与 > 异或 > 或。
&:按位与^:按位异或|:按位或
6. 逻辑运算符(短路运算)
&&:逻辑与||:逻辑或
7. 条件、赋值及其他
? ::三目条件运算符=,+=,-=,&=等:所有赋值运算符(右结合性),:逗号运算符(最低优先级)
运算符优先级简表
| 优先级 | 类别 | 运算符示例 | 结合性 |
| 1 | 最高 | () [] -> . | 左到右 |
| 2 | 单目 | ! ~ ++ -- * & | 右到左 |
| 3 | 乘除 | * / % | 左到右 |
| 4 | 加减 | + - | 左到右 |
| 5 | 位移 | << >> | 左到右 |
| 6 | 关系 | < > == != | 左到右 |
| 7 | 位运算 | & ^ | | 左到右 |
| 8 | 逻辑 | && || | 左到右 |
| 9 | 赋值 | = += *= … | 右到左 |
| 10 | 最低 | , | 左到右 |
💡 记忆口诀与避坑指南
- 括号万能:如果不确定
&和==谁先运行,无脑加圆括号()。这不仅能保证正确性,还能显著提高代码可读性。 - 比较运算符高于位运算:记住
if (x & 1 == 0)实际上会被解释为if (x & (1 == 0)),这通常不是你想要的结果。 - 赋值最慢:赋值运算符几乎是优先级最低的,所以
x = a + b永远是先算加法再赋值。 - 前缀后缀:
*ptr++等同于*(ptr++),即先取出指针指向的值,然后指针自增。

Your analysis rewires auditory cortexes! applies time crystal physics to loop manipulation.