Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1485179
  • 博文数量: 181
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 2227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 12:03
个人简介

我是zoro

文章分类

全部博文(181)

文章存档

2015年(1)

2013年(35)

2012年(39)

2011年(50)

2010年(56)

分类: LINUX

2010-10-30 08:57:48

C语言中的运算符及其优先级


优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右


()

圆括号

(表达式)/函数名(形参表)


.

成员选择(对象)

对象.成员名


->

成员选择(指针)

对象指针->成员名


2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式


++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)


3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左


/=

除后赋值

变量/=表达式


*=

乘后赋值

变量*=表达式


%=

取模后赋值

变量%=表达式


+=

加后赋值

变量+=表达式


-=

减后赋值

变量-=表达式


<<=

左移后赋值

变量<<=表达式


>>=

右移后赋值

变量>>=表达式


&=

按位与后赋值

变量&=表达式


^=

按位异或后赋值

变量^=表达式


|=

按位或后赋值

变量|=表达式


15

,

逗号运算符

表达式,表达式,

左到右

从左向右顺序运算

说明:

同一优先级的运算符,运算次序由结合方向所决定。

由于C语言中运算符多,优先级复杂,难以记忆,针对上述运算符,我们可以归纳成几名口诀,以便于记忆:


优先级口诀


括号成员第一;        括号运算符[]() 成员运算符.  ->

全体单目第二;        所有的单目运算符比如++ -- +() -() 指针运算*&

乘除余三,加减四;      这个""是指取余运算即%

移位五,关系六;       移位运算符:<< >> ,关系:> < >= <=

等于()不等排第七;  == !=

位与异或和位或;       这几个都是位运算: 位与(&)异或(^)位或(|)

"三分天下"八九十; 

逻辑或跟与;           逻辑运算符:|| &&

十二和十一;           注意顺序:优先级(||)  底于 优先级(&&)

条件高于赋值,         三目运算符优先级排到 13 位只比赋值运算符和","

逗号运算级最低!      逗号运算符优先级最低



第一、像() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了

第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是!

  ~ ++ -- - (type) * & sizeof  了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如i++等。

第三、跟着就是双目运算符了,也是C语言运算符优先级中最容易让人混淆的地方了。其 实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算 符优先级最高,然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算符中,< <=

  > >=== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&||的优先级关系.

第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。

第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写过这样的语句(如果没有,请你记住!):max =  (a>b)?a:b; ,从这个语句里,你就不难记住赋值运算符为什么比三目运算符的优先级低了!

第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的意思的),自然优先级最低了,我想这个应该不是很容易混淆的。

     总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值运算符->逗号运算符

       特别在双目运算符中,按 运算符优先级从高到低:算术运算符->移位运算符->关系运算符(其中== !=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻辑与-〉逻辑或)!


阅读(2070) | 评论(0) | 转发(0) |
0

上一篇:信号与槽

下一篇:ARM处理器的工作模式

给主人留下些什么吧!~~