- C++
C++ 里,运算符优先级
- @ 2025-4-24 21:10:08
在 C++ 里,运算符优先级规定了表达式中运算符执行的先后顺序。下面将详细介绍常见运算符的优先级。
优先级顺序
C++ 运算符优先级从高到低大致可分为以下几个等级:
1. 括号类
- 括号
():用于改变表达式的运算顺序,具有最高优先级。在括号内的表达式会优先计算。
#include <iostream>
int main() {
int result = (2 + 3) * 4;
std::cout << result << std::endl;
return 0;
}
此例中,先计算括号内的 2 + 3,再将结果乘以 4。
2. 一元运算符
- 逻辑非
!:对操作数的逻辑值取反。 - 按位取反
~:对操作数的每一个二进制位取反。 - 自增
++和 自减--:分为前置和后置,前置先改变变量的值再使用,后置先使用变量的值再改变。 - 正号
+和 负号-:表示数值的正负。
#include <iostream>
int main() {
int a = 5;
int b = -a;
int c = !a;
std::cout << b << " " << c << std::endl;
return 0;
}
这里,-a 取 a 的负值,!a 对 a 的逻辑值取反。
3. 算术运算符
- 乘法
*、除法/和 取模%:这些运算符优先级相同,按照从左到右的顺序计算。 - 加法
+和 减法-:优先级低于乘除和取模,同样按从左到右的顺序计算。
#include <iostream>
int main() {
int result = 5 + 3 * 2;
std::cout << result << std::endl;
return 0;
}
此例中,先计算 3 * 2,再将结果与 5 相加。
4. 移位运算符
- 左移
<<和 右移>>:将操作数的二进制位向左或向右移动指定的位数。
#include <iostream>
int main() {
int a = 5;
int b = a << 2;
std::cout << b << std::endl;
return 0;
}
这里,a 的二进制位向左移动 2 位。
5. 关系运算符
- 小于
<、小于等于<=、大于>和 大于等于>=:用于比较两个操作数的大小关系。 - 等于
==和 不等于!=:用于判断两个操作数是否相等。
#include <iostream>
int main() {
int a = 5;
int b = 3;
bool result = a > b;
std::cout << std::boolalpha << result << std::endl;
return 0;
}
此例中,比较 a 和 b 的大小。
6. 位运算符
- 按位与
&:对两个操作数的对应二进制位进行与运算。 - 按位异或
^:对两个操作数的对应二进制位进行异或运算。 - 按位或
|:对两个操作数的对应二进制位进行或运算。
#include <iostream>
int main() {
int a = 5;
int b = 3;
int result = a & b;
std::cout << result << std::endl;
return 0;
}
这里,对 a 和 b 进行按位与运算。
7. 逻辑运算符
- 逻辑与
&&:只有当两个操作数的逻辑值都为真时,结果才为真。 - 逻辑或
||:只要两个操作数的逻辑值中有一个为真,结果就为真。
#include <iostream>
int main() {
int a = 5;
int b = 3;
bool result = (a > 0) && (b < 5);
std::cout << std::boolalpha << result << std::endl;
return 0;
}
此例中,使用逻辑与运算符判断两个条件是否同时成立。
8. 条件运算符(三元运算符)
? ::根据条件表达式的值选择两个表达式中的一个进行计算。
#include <iostream>
int main() {
int a = 5;
int b = 3;
int result = (a > b) ? a : b;
std::cout << result << std::endl;
return 0;
}
这里,如果 a > b 为真,结果为 a,否则为 b。
9. 赋值运算符
=、+=、-=、*=、/=、%=等:用于给变量赋值或进行复合赋值操作。
#include <iostream>
int main() {
int a = 5;
a += 3;
std::cout << a << std::endl;
return 0;
}
此例中,a += 3 等价于 a = a + 3。
10. 逗号运算符
,:从左到右依次计算逗号分隔的表达式,结果为最后一个表达式的值。
#include <iostream>
int main() {
int a = (1, 2, 3);
std::cout << a << std::endl;
return 0;
}
这里,表达式 (1, 2, 3) 的结果为 3。
注意事项
- 为了让代码更具可读性,避免因优先级问题引发错误,建议使用括号来明确运算顺序。
- 运算符优先级只是规定了表达式中运算符的执行顺序,在实际编程中,还需要考虑运算符的结合性(从左到右或从右到左)。
你可以参考下面的表格来更清晰地查看运算符优先级:
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | :: |
从左到右 |
| 2 | () [] -> . ++ --(后缀) |
|
| 3 | ++ --(前缀) + - ! ~ (type) * & sizeof alignof |
从右到左 |
| 4 | .* ->* |
从左到右 |
| 5 | * / % |
|
| 6 | + - |
|
| 7 | << >> |
|
| 8 | < <= > >= |
|
| 9 | == != |
|
| 10 | & |
|
| 11 | ^ |
|
| 12 | 按位或 |
|
| 13 | && |
|
| 14 | 逻辑或 |
|
| 15 | ?: |
从右到左 |
| 16 | = += -= *= /= %= &= ^= 或等于 <<= >>= |
|
| 17 | , |
从左到右 |
0 条评论
目前还没有评论...