当前位置: C语言 -- 附录 -- 运算符的优先级和结合性

运算符的优先级和结合性

优先级 运算符名称 运算符符号 结合性
1 自增(后缀)
自减(后缀)
函数调用
数组下标
取结构或者联合的成员(通过对象名)
取结构或者联合的成员(通过指针)
++
--
( )
[ ]
.
->
左结合性
2 自增(前缀)
自减(前缀)
正号
负号
按位取反
逻辑非
强制类型转换
间接寻址
取地址
计算空间
对齐
++
--
+
-
~
!
( )
*
&
sizeof
_Alignof
右结合性
3 乘法
除法
取余
*
/
%
左结合性
4 加法
减法
+
-
左结合性
5 左移
右移
<<
>>
左结合性
6 大于
大于等于
小于
小于等于
>
>=
<
<=
左结合性
7 等于
不等于
==
!=
左结合性
8 按位与 & 左结合性
9 按位异或 ^ 左结合性
10 按位或 | 左结合性
11 逻辑与 && 左结合性
12 逻辑或 || 左结合性
13 条件 ? : 右结合性
14
赋值
= += -= *=
/= %= <<= >>=
&= ^= |=
右结合性
15 逗号 , 左结合性

表中运算符的优先级按优先级编号从上到下逐步降低,优先级编号相同的运算符优先级相同。

例如:2*3+4

因为*运算符优先级高于+运算符,所有先执行2*3,然后再将结果与4相加。


在一个表达式中,如果存在多个优先级相同的运算符,将由运算符的结合性决定执行顺序。

例如:2*3/4

*运算符与/运算符优先级相同,两者都是左结合性,所以先执行左边的2*3,然后再将结果除以4