在 C++ 中,运算符的优先级决定了在一个表达式中,哪些运算符先被计算,有助于我们理解复杂表达式的计算顺序。掌握运算符优先级可以帮助我们避免潜在的错误并写出更清晰的代码。
运算符优先级的基本概念
运算符优先级是指运算符在表达式中计算顺序的规则。优先级高的运算符会先于优先级低的运算符被计算。若运算符的优先级相同,则由它们的结合性决定运算的顺序。
结合性
结合性决定了相同优先级的运算符在表达式中如何组合计算。它可以是:
- 左结合:从左到右计算,例如
-
和+
运算符。 - 右结合:从右到左计算,例如赋值运算符
=
和条件运算符?:
。
常见运算符优先级表
以下是一些常见运算符的优先级,从高到低:
运算符 | 描述 | 优先级 | 结合性 |
---|---|---|---|
() |
函数调用 | 最高 | - |
[] |
数组下标 | - | |
-> |
成员指针访问 | - | |
. |
成员访问 | - | |
++ (前置) |
前置自增 | - | |
-- (前置) |
前置自减 | - | |
! |
逻辑非 | - | |
~ |
按位取反 | - | |
* , / , % |
乘法、除法、取余 | 左结合 | |
+ , - |
加法、减法 | 左结合 | |
<< , >> |
位移运算 | 左结合 | |
< , <= , > , >= |
比较运算 | 左结合 | |
== , != |
相等运算 | 左结合 | |
& |
按位与 | 左结合 | |
^ |
按位异或 | 左结合 | |
` | ` | 按位或 | |
&& |
逻辑与 | 左结合 | |
` | ` | 逻辑或 | |
?: |
条件运算符 | 低 | 右结合 |
= |
赋值运算 | 右结合 | |
+= , -= 等 |
复合赋值运算 | 右结合 | |
comma (,) |
逗号运算符 | 最低 | 左结合 |
示例代码
让我们通过一些示例来更好地理解运算符优先级。
例1:简单计算
1 |
|
在上述代码中,表达式 a + b * c
中,b * c
会先于 a +
被计算,因此最终结果为 10 + 600 = 610
。
例2:使用括号改变优先级
1 |
|
在这个例子中,使用括号改变了运算的顺序,使得 a + b
会先计算,最终结果为 (10 + 20) * 30 = 900
。
总结
理解运算符的优先级和结合性是编写 C++ 程序的基础。熟练掌握这些规则可以帮助你写出更简洁、高效的代码,避免由于优先级误解而导致的错误。使用 ()
可以灵活地改变计算顺序,确保逻辑的正确性。