C++ 运算符优先级与结合性总结
以下是 C++ 运算符优先级与结合性 的总结(从高到低排列),帮助你快速理解表达式计算顺序:
C++ 运算符优先级与结合性速查表
| 优先级 | 类别 | 运算符 | 结合性 |
|---|---|---|---|
| 1(最高) | 后缀运算符 | ()(函数调用)、[](数组下标)、->(指针成员访问)、.(成员访问)、++(后缀自增)、--(后缀自减) |
从左到右 |
| 2 | 一元运算符 | +(正号)、-(负号)、!(逻辑非)、~(按位取反)、++(前缀自增)、--(前缀自减)、(type)(类型转换)、*(解引用)、&(取地址)、sizeof(求大小) |
从右到左 |
| 3 | 乘除运算符 | *(乘法)、/(除法)、%(取模) |
从左到右 |
| 4 | 加减运算符 | +(加法)、-(减法) |
从左到右 |
| 5 | 移位运算符 | <<(左移)、>>(右移) |
从左到右 |
| 6 | 关系运算符 | <(小于)、<=(小于等于)、>(大于)、>=(大于等于) |
从左到右 |
| 7 | 相等运算符 | ==(等于)、!=(不等于) |
从左到右 |
| 8 | 位与运算符 | &(按位与) |
从左到右 |
| 9 | 位异或运算符 | ^(按位异或) |
从左到右 |
| 10 | 位或运算符 | ` | `(按位或) |
| 11 | 逻辑与运算符 | &&(逻辑与) |
从左到右 |
| 12 | 逻辑或运算符 | ` | |
| 13 | 条件运算符 | ?:(三元条件) |
从右到左 |
| 14(最低) | 赋值运算符 | =、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、` |
=` |
| 15 | 逗号运算符 | ,(逗号) |
从左到右 |
关键说明
-
优先级高低:
- 优先级越高的运算符越先被计算。例如:
a * b + c中,*(优先级3)先于+(优先级4)计算。 - 若优先级相同,按 结合性 决定计算顺序:
- 从左到右(如
a + b - c):先算a + b,再减c。 - 从右到左(如
a = b = c):先算b = c,再将结果赋值给a。
- 从左到右(如
- 优先级越高的运算符越先被计算。例如:
-
易混淆点:
- 一元运算符 vs 加减运算符:
++i(前缀自增,优先级2)比i++(后缀自增,优先级1)优先级低,但结合性不同(前缀自增为右结合,后缀自增为左结合)。
- 逻辑运算符 vs 位运算符:
&&(逻辑与,优先级11)和||(逻辑或,优先级12)的优先级远低于位运算符(如&、^、|)。例如:a & b && c等价于(a & b) && c,而非a & (b && c)。
- 一元运算符 vs 加减运算符:
-
括号改变优先级:
- 用
()显式指定计算顺序,避免依赖默认优先级。例如:(7 + 3) * 2会先算加法,结果为20。
- 用
示例解析
示例1:混合运算符表达式
int a = 10, b = 2, c = 3;
int x = a + b * c % 2; // 计算顺序:* → % → +
// 步骤:2*3=6 → 6%2=0 → 10+0=10 → x=10
示例2:赋值与条件运算符
int m = 5, n = 3;
int result = m > n ? m++ : --n; // 条件运算符优先级13,高于赋值运算符(优先级14)
// 步骤:m>n为true → 取m++(后缀自增,优先级1)→ result=5,m变为6
示例3:位运算符与逻辑运算符
bool flag = 3 & 5 || 4 > 6; // 位与(&,优先级8)先于逻辑或(||,优先级12)
// 步骤:3&5=1(二进制 0011 & 0101 = 0001)→ 1||false= true → flag=true
记忆技巧
- 高优先级组:
- 后缀运算符(函数调用、数组下标等)和一元运算符(自增、取地址等)优先级最高。
- 算术运算符:
- 乘除取模(
*、/、%)高于加减(+、-),移位运算符(<<、>>)次之。
- 乘除取模(
- 逻辑运算符:
- 关系运算符(
<、==等)高于逻辑与(&&)和逻辑或(||),位运算符优先级介于关系运算符和逻辑运算符之间。
- 关系运算符(
- 低优先级组:
- 条件运算符(
?:)、赋值运算符(=)、逗号运算符优先级最低,且多为右结合性。
- 条件运算符(
总结
- 优先级决定表达式中运算符的计算顺序,结合性决定同级运算符的计算方向。
- 复杂表达式中建议用
()明确优先级,避免因记忆偏差导致逻辑错误。 - 熟练掌握优先级可提高代码可读性和调试效率,尤其在处理位运算、逻辑表达式时需格外注意。C++ 运算符优先级是指在表达式计算中运算符被执行的先后顺序。优先级高的运算符会先被计算,若优先级相同则根据结合性决定计算顺序。以下是 C++ 中运算符优先级的总结:
优先级层级(从高到低)
-
后缀运算符:
()(函数调用)、[](数组下标)、->(指针成员访问)、.(对象成员访问)、++(后缀自增)、--(后缀自减)
结合性:从左到右 -
一元运算符:
+(正号)、-(负号)、!(逻辑非)、~(按位取反)、++(前缀自增)、--(前缀自减)、(type)(强制类型转换)、*(解引用)、&(取地址)、sizeof
结合性:从右到左 -
算术运算符
- 乘除模:
*、/、% - 加减:
+、-
结合性:从左到右
- 乘除模:
-
移位运算符:
<<(左移)、>>(右移)
结合性:从左到右 -
关系运算符:
<、<=、>、>=
结合性:从左到右 -
相等运算符:
==、!=
结合性:从左到右 -
位运算符
- 位与:
& - 位异或:
^ - 位或:
|
结合性:从左到右
- 位与:
-
逻辑运算符
- 逻辑与:
&& - 逻辑或:
||
结合性:从左到右
- 逻辑与:
-
条件运算符:
?:
结合性:从右到左 -
赋值运算符:
=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=
结合性:从右到左 -
逗号运算符:
,
结合性:从左到右
关键点
- 优先级决定计算顺序:例如
a + b * c中,*优先于+,因此先计算b * c。 - 结合性处理同级运算:例如
a = b = c中,赋值运算符从右到左结合,因此先执行b = c,再执行a = b。 - 括号改变优先级:显式使用
()可以强制改变计算顺序,例如(a + b) * c先计算加法。
掌握运算符优先级是编写正确、易读代码的基础。在复杂表达式中,建议使用括号明确指定计算顺序,避免依赖默认优先级导致的歧义。

浙公网安备 33010602011771号