按照从高到低的优先级顺序排列:
1. 括号运算符
()
:用于改变运算的优先级。
2. 后缀运算符
- 数组下标
[]
- 函数调用
()
- 结构体成员访问
.
和->
- 后缀自增
++
- 后缀自减
--
3. 单目运算符
- 逻辑非
!
- 按位取反
~
- 正号
+
- 负号
-
- 类型转换
(type)
- 地址运算符
&
- 间接寻址(解引用)
*
- 长度运算符
sizeof
_Alignof
(C11新增)
4. 乘法运算符
- 乘法
*
- 除法
/
- 求余
%
5. 加法运算符
- 加法
+
- 减法
-
6. 移位运算符
- 左移
<<
- 右移
>>
7. 关系运算符
- 小于
<
- 大于
>
- 小于等于
<=
- 大于等于
>=
8. 等于运算符
- 等于
==
- 不等于
!=
9. 位与运算符
- 按位与
&
10. 位异或运算符
- 按位异或
^
11. 位或运算符
- 按位或
|
12. 逻辑与运算符
- 逻辑与
&&
13. 逻辑或运算符
- 逻辑或
||
14. 条件运算符
- 三元条件运算符
?:
15. 赋值运算符
- 简单赋值
=
- 加法赋值
+=
- 减法赋值
-=
- 乘法赋值
*=
- 除法赋值
/=
- 求余赋值
%=
- 左移赋值
<<=
- 右移赋值
>>=
- 按位与赋值
&=
- 按位异或赋值
^=
- 按位或赋值
|=
16. 逗号运算符
- 逗号
,
注意事项
- 运算符的优先级决定了在表达式中哪个操作首先被执行。
- 可以通过使用括号
()
来改变运算的默认优先级。 - 当两个运算符具有相同的优先级时,它们的结合性(从左到右或从右到左)决定了操作的顺序。大多数二元运算符(除了赋值运算符和条件运算符外)都是从左到右结合的,但赋值运算符和条件运算符是从右到左结合的。
这个列表涵盖了C语言中所有的运算符及其优先级,但请注意,随着C语言标准的发展(如C99、C11、C17等),可能会引入新的运算符或特性,但基本的运算符优先级结构保持不变。