C++ 中的运算符优先级
C++ 运算符优先级
运算符优先级决定了表达式中运算的执行顺序。优先级较高的运算符优先计算。
示例
考虑以下表达式:
int x = 10 + 4 * 3;
这里,乘法的优先级高于加法,因此首先计算 4 * 3,结果为 x = 10 + 12,进而得出 x = 22。
要更改顺序,请使用括号:
int x = (10 + 4) * 3;
现在首先计算 10 + 4,结果为 x = 14 * 3,进而得出 x = 42。
C++ 运算符优先级表
运算符按优先级从上到下降序排列:
运算符 | 描述 | 示例 |
---|---|---|
() [] -> . | 函数调用、下标、成员访问 | arr[0], obj.method(), ptr->member |
++ -- | 递增/递减 | x++, --y |
! ~ - + | 逻辑/按位非,一元加/减 | !flag, ~num, -value, +value |
* / % | 乘法、除法、模数 | a * b, x / y, n % 2 |
+ - | 加法,减法 | a + b, x - y |
<< >> | 按位移位 | x > 3 |
< <= > >= | 关系运算符 | a = y |
== != | 相等运算符 | a == b, x != y |
& | 按位与 | a & b |
^ | 按位异或 | x ^ y |
| | 按位或 | a | b |
&& | 逻辑与 | x && y |
|| | 逻辑或 | a || b |
?: | 三元条件 | x ? y : z |
= += -= *= /= %= &= ^= |= >= | 赋值和复合赋值 | a = b, x += y, z >>= 2 |
, | 逗号 | x = (a, b, c) |
运算符优先级示例
尝试以下示例来理解 C++ 中运算符优先级的概念。将以下 C++ 程序复制并粘贴到 test.cpp 文件中,然后编译并运行该程序。
检查带括号和不带括号的简单区别。由于 ()、/、* 和 + 的优先级不同,因此会产生不同的结果。优先级较高的运算符将首先被求值 -
#include <iostream> using namespace std; main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 cout << "Value of (a + b) * c / d is :" << e << endl ; e = ((a + b) * c) / d; // (30 * 15 ) / 5 cout << "Value of ((a + b) * c) / d is :" << e << endl ; e = (a + b) * (c / d); // (30) * (15/5) cout << "Value of (a + b) * (c / d) is :" << e << endl ; e = a + (b * c) / d; // 20 + (150/5) cout << "Value of a + (b * c) / d is :" << e << endl ; return 0; }
当编译并执行上述代码时,它会产生以下结果 -
Value of (a + b) * c / d is :90 Value of ((a + b) * c) / d is :90 Value of (a + b) * (c / d) is :90 Value of a + (b * c) / d is :50