CPP和C运算符优先级结合性表
运算符优先级决定了运算符用于值的顺序。C+运算符分为18个优先级组,如表所示。第1组中的运算符的优先级最高,第2组中运算符的优先级次之,依此类推。
一个表达式中,优先级高的运算符先于优先级低的运算符进行运算。优先级相同的运算符按照结合性方向进行运算。
下面是《C++ Primer plus》中的C++运算符优先级表:
C++运算符优先级结合性表
优先级 | 运算符 | 结合性 | 含义 |
---|---|---|---|
1 | :: |
- | 作用域解析运算符 |
2 | (表达式) |
L-R | 分组 |
2 | () |
L-R | 函数调用 |
2 | () |
L-R | 值构造,既type(expr) |
2 | [] |
L-R | 数组下标 |
2 | -> |
L-R | 间接成员运算符 |
2 | . |
L-R | 直接成员运算符 |
2 | const_cast |
L-R | 专用的类型转换 |
2 | dynamic_cast |
L-R | 专用的类型转换 |
2 | reinterpret_cast |
L-R | 专用的类型转换 |
2 | static_cast |
L-R | 专用的类型转换 |
2 | typeid |
L-R | 类型标识(类型信息查询) |
2 | ++ |
L-R | 加1运算符,后缀形式 |
2 | -- |
L-R | 减1运算符,后缀形式 |
3 | ! |
R-L | 逻辑非 |
3 | ~ |
R-L | 位非(按位求反) |
3 | + |
R-L | 一元加运算符(正号) |
3 | - |
R-L | 一元减运算符(负号) |
3 | ++ |
R-L | 加1运算符,前缀形式 |
3 | -- |
R-L | 减1运算符,前缀形式 |
3 | & |
R-L | 地址(取地址运算符) |
3 | * |
R-L | 解除引用(间接值) |
3 | () |
R-L | 类型转换,既(type)expr |
3 | sizeof |
R-L | 长度,以字节为单位 |
3 | new |
R-L | 动态分配内存 |
3 | new[] |
R-L | 动态分配数组 |
3 | delete |
R-L | 动态释放内存 |
3 | delete[] |
R-L | 动态释放数组 |
4 | .* |
L-R | 成员解除引用 |
4 | ->* |
L-R | 间接成员解除引用 |
5 | * |
L-R | 乘 |
5 | / |
L-R | 除 |
5 | % |
L-R | 模(余数) |
6 | + |
L-R | 加 |
6 | - |
L-R | 减 |
7 | << |
L-R | 左移 |
7 | >> |
L-R | 右移 |
8 | < |
L-R | 小于 |
8 | <= |
L-R | 小于或等于 |
8 | >= |
L-R | 大于或等于 |
8 | > |
L-R | 大于 |
9 | == |
L-R | 等于 |
9 | != |
L-R | 不等于 |
10 | & |
L-R | 按位与 |
11 | ^ |
L-R | 按位异或 |
12 | | |
L-R | 按位或 |
13 | && |
L-R | 逻辑与 |
14 | || |
L-R | 逻辑或 |
15 | ?: |
R-L | 条件 |
16 | = |
R-L | 简单赋值 |
16 | *= |
R-L | 乘后赋值 |
16 | /= |
R-L | 除后赋值 |
16 | %= |
R-L | 模后赋值 |
16 | += |
R-L | 加后赋值 |
16 | -= |
R-L | 减后赋值 |
16 | &= |
R-L | 按位与后赋值 |
16 | ^= |
R-L | 按位异或后赋值 |
16 | |= |
R-L | 按位或后赋值 |
16 | <<= |
R-L | 左移后赋值 |
16 | >>= |
R-L | 右移后赋值 |
17 | throw |
L-R | 引发异常 |
18 | , |
L-R | 将两个表达式合并成一个(逗号) |
C语言的运算符优先级表:
C语言运算符优先级结合性表
运算符 | 优先级 | 结合性 |
---|---|---|
() 、[] 、. 、-> |
1 | 从左到右 |
++ 、-- 、+ 、- 、! 、~ 、* 、& 、(类型) 、sizeof |
2 | 从右到左 |
* 、/ 、% |
3 | 从左到右 |
+ 、- |
4 | 从左到右 |
<< 、>> |
5 | 从左到右 |
< 、<= 、> 、>= |
6 | 从左到右 |
== 、!= |
7 | 从左到右 |
& |
8 | 从左到右 |
^ |
9 | 从左到右 |
| |
10 | 从左到右 |
&& |
11 | 从左到右 |
|| |
12 | 从左到右 |
?: |
13 | 从右到左 |
= 、+= 、-= 、*= 、/= 、%= 、<<= 、>>= 、&= 、^= 、|= |
14 | 从右到左 |
, |
15 | 从左到右 |