首页 > 代码库 > C语言学习笔记(四) 运算符优先级

C语言学习笔记(四) 运算符优先级

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

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

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

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

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

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

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

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

  • 逗号永远最低。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


本文出自 “飞翔的猫咪” 博客,请务必保留此出处http://flyingcat2013.blog.51cto.com/7061638/1566275

C语言学习笔记(四) 运算符优先级