CPP和C运算符优先级结合性表

发布时间 2023-11-15 21:25:48作者: BryceAi

运算符优先级决定了运算符用于值的顺序。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 从左到右