C语言中有很多运算符,除了四则运算,还有位运算、比较运算、逻辑运算、赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼。通常建议在写代码的时候不用省略括号,但是并不是所有程序员都会按照这个规矩来,因此还是有必要记录一下,以备查阅。

下面表格中详细记录了各种运算符的优先级。没有必要死记硬背这张表,代码见多了用多了就慢慢记得了。总结几个比较重要的原则:

  • 取成员的“0”目运算符【() . -> []】优先级最高;

  • 单目运算符高于双目运算符;

  • 四则运算高于移位运算;

  • 移位运算高于比较运算;

  • 比较运算高于位运算,位运算高于逻辑运算;

  • 逻辑运算高于赋值运算;

  • 逗号永远最低。

C语言优先级表注:同一优先级的运算符,运算次序由结合方向所决定。
优先级
运算符 名称或含义 使用形式 结合方向 说明
1 [] 数组下标
数组名[常量表达式]
左到右

() 圆括号
(表达式)/函数名(形参表)

. 成员选择(对象)
对象.成员名

-> 成员选择(指针)
对象指针->成员名

2 -
符号 -表达式 右到左
单目运算符
(类型名) 强制转换 (数据类型)表达式

++ 自增 ++变量名/变量名++
单目运算符
-- 自减 --变量名/变量名--
单目运算符
* 取值
*指针变量
单目运算符
& 取址 &变量名
单目运算符
! 逻辑非 !表达式
单目运算符
~ 按位取反 ~表达式
单目运算符
sizeof 计算长度 sizeof(表达式)

3 / 表达式/表达式
左到右
双目运算符
* 表达式*表达式
双目运算符
% 模(余) 整型表达式%整型表达式
双目运算符
4 + 表达式+表达式
左到右
双目运算符
- 表达式-表达式
双目运算符
5 << 左移 变量<<表达式
左到右
双目运算符
>> 右移 变量>>表达式
双目运算符
6 >
大于
表达式>表达式
左到右
双目运算符
>= 大于等于
表达式>=表达式
双目运算符
< 小于
表达式<表达式
双目运算符
<= 小于等于
表达式<=表达式
双目运算符
7 == 等于 表达式==表达式
左到右
双目运算符
!= 等于 表达式!=表达式
双目运算符
8 & 按位与
表达式&表达式
左到右
双目运算符
9 ^ 按位异或
表达式^表达式
左到右
双目运算符
10 | 按位或
表达式|表达式
左到右
双目运算符
11 && 逻辑与
表达式&&表达式
左到右
双目运算符
12 || 逻辑或
表达式||表达式
左到右
双目运算符
13 ?: 条件运算符
表达式1 ? 表达式2 : 表达式3
右到左
三目运算符
14 = 赋值
变量=表达式
右到左

/= 除后赋值
变量/=表达式

*= 乘后赋值
变量*=表达式

%= 取模后赋值
变量%=表达式

+= 加后赋值
变量+=表达式

-= 减后赋值
变量-=表达式

<<= 左移后赋值
变量<<=表达式

>>= 右移后赋值
变量>>=表达式

&=
按位与后赋值
变量&=表达式

^= 按位异或后赋值
变量^=表达式

|= 按位或后赋值
变量|=表达式

15 , 逗号
表达式,表达式,…
左到右