C语言运算符优先级列表(超级详细的---转载加自己习题)

转载于:http://www.jb51.net/article/37282.htm

每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖!

C语言运算符优先级  :说明: 从上到下1,2,3,4,......,15代表了优先级的先后顺序。同一优先级的运算符,运算次序由结合方向所决定。

                                

优先级

运算符

名称或含义

使用形式

结合方向

说明

 

1

[]

数组下标

数组名[常量表达式]

左到右

前述运算符

 

 

()

圆括号

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

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针->成员名

 

2

-

负号运算符

-表达式

右到左

单目运算符

 

~

按位取反运算符

~表达式

 

++

自增运算符

++变量名/变量名++

 

--

自减运算符

--变量名/变量名--

 

*

取值运算符

*指针变量

 

&

取地址运算符

&变量名

 

!

逻辑非运算符

!表达式

 

(类型)

强制类型转换

(数据类型)表达式

--

 

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

算术运算符

(双目运算符)

 

*

表达式*表达式

 

%

余数(取模)

整型表达式%整型表达式

 

4

+

表达式+表达式

左到右

算术运算符

(双目运算符)

 

-

表达式-表达式

 

5

<< 

左移

变量<<表达式

左到右

移位运算符

(双目运算符)

 

>> 

右移

变量>>表达式

 

6

大于

表达式>表达式

左到右

 

(双目运算符)

 

>=

大于等于

表达式>=表达式

 

小于

表达式<表达式

 

<=

小于等于

表达式<=表达式

 

7

==

等于

表达式==表达式

左到右

双目运算符

 

!=

不等于

表达式!= 表达式

 

8

&

表达式&表达式

左到右

双目运算符

 

9

^

按位异或

表达式^表达式

左到右

双目运算符

 

10

|

按位或

表达式|表达式

左到右

双目运算符

 

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

 

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

统称为

赋值运算符

 

/=

除后赋值

变量/=表达式

 

*=

乘后赋值

变量*=表达式

 

%=

取模后赋值

变量%=表达式

 

+=

加后赋值

变量+=表达式

 

-=

减后赋值

变量-=表达式

 

<<=

左移后赋值

变量<<=表达式

 

>>=

右移后赋值

变量>>=表达式

 

&=

按位与后赋值

变量&=表达式

 

^=

按位异或后赋值

变量^=表达式

 

|=

按位或后赋值

变量|=表达式

 

15

逗号运算符

表达式,表达式,…

左到右

取的是最后的一个表达式的值

 

 简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

举例:

结合以下的几个例子进行分析:

eg1:

int  k=7;
int x=12;

printf("%d
",x%=(k%=5));

//先算括号里面的取余运算符  得到结果x%=2;
//接着再计算x=x%2;  结果为0

eg2:

int k=7;
int x=12;

printf("%d
",x%=k-k%5);  //运行结果是2

eg3:

int n=10;i=4;
printf("%d
",n%=i+1);  //运行结果是0

//%=(取余赋值运算符)优先级低于+
原文地址:https://www.cnblogs.com/bingdaocaihong/p/6955775.html