首页 > 编程相关 > C语言运算符优先级 详细列表

C语言运算符优先级 详细列表

2008年10月24日 11:58 发表评论 阅读评论

文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。。。

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

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

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

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

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

/=

除后赋值

变量/=表达式

*=

乘后赋值

变量*=表达式

%=

取模后赋值

变量%=表达式

+=

加后赋值

变量+=表达式

-=

减后赋值

变量-=表达式

<<=

左移后赋值

变量<<=表达式

>>=

右移后赋值

变量>>=表达式

&=

按位与后赋值

变量&=表达式

^=

按位异或后赋值

变量^=表达式

|=

按位或后赋值

变量|=表达式

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

说明:

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

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

分类: 编程相关 标签:
  1. 晓樂
    2012年5月11日21:16 | #1

    太感谢了~~~

  2. zyymcu
    2012年2月22日09:38 | #2

    这个应该是不确定吧?side effect 应该和编译器有关。。求指正。http://hi.baidu.com/woaimuxiaoyizhong/blog/item/4018c38bc6c0ab0fc8fc7a93.html?timeStamp=1329874358911 @Slyar

  3. 2012年2月21日23:59 | #3

    google c 优先级 这篇文章排第一 楼主V5

  4. 匿名
    2012年2月6日15:53 | #4

    好人啊.

  5. 2012年1月12日19:29 | #5

    @telu
    呵呵,++i这种形式还好, i++这种在比较多的情况下就要小心了,不同编译器的计算方式不同的.

  6. 2012年1月6日00:21 | #6

    与或非的优先级的顺序应该是这样的吧, not(!) 优先于 and(&&) 优先于 or(||)

  7. Amos
    2011年11月27日18:07 | #7

    用括号是没错,可看内核代码的时候就得上了.

  8. 匿名
    2011年10月31日20:53 | #8

    路过的DOWN一下,非常感谢!!!

  9. feichangge
    2011年10月1日19:13 | #9

    @Slyar
    括号大于++,按优先级应该是7

  10. feichangge
    2011年10月1日19:11 | #10

    @telu
    我的可以运行,而且有结果,你可以试试

  11. 2011年9月26日14:41 | #11

    @feichangge
    确实是不合法,应该是
    j=0;
    q=++j+(++j+ (++j));

  12. 2011年8月29日20:01 | #12

    @feichangge 那就没错鸟,++j=1,++j=2,++j=3,3+3+3=9

  13. feichangge
    2011年8月29日19:34 | #13

    @Slyar
    =。=打错了
    j=0;
    q=++j + (++j + ++j);

  14. 2011年8月28日16:32 | #14

    @feichangge 额,这样的表达式是不合法的吧...

  15. feichangge
    2011年8月28日15:55 | #15

    j=0;
    q=++j=(++j+ ++j);
    结果是9

  16. 匿名
    2011年5月10日19:56 | #16

    谢谢啦!!

  17. sm
    2011年4月23日17:35 | #17

    好多不懂啊~~~

  18. 2008年11月18日16:59 | #18

    %
    余数(取模)
    整型表达式/整型表达式
    双目运算符

    这里应该是模运算,取余吧?

  19. 2008年11月18日14:29 | #19

    呵呵,挺不错的,不过,感觉还是有更多完善的地方。感觉使用用形不够完全,假如更详细点,我想会好很多,呵呵。

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

    我不知道如何理解,能方便的记住优先级关系,请站长解释,谢谢!

  20. 2008年10月25日15:09 | #20

    大S什么时候研究下AS?我喜欢...

    Slyar 回复:

    AS啊。。。难不难?

  21. 2008年10月24日22:20 | #21

    括号才是王道。。要记下这样复杂的优先级表,太不人道了。

    Slyar 回复:

    恩,我从来不吝啬括号,可是新同学们总是想去掉括号,于是乎。。。我还是写出来让他们自己看吧~~

  22. 2008年10月24日17:26 | #22

    谢谢你的提醒,不过在我这里是正常:Firefox 3.0.3
    17"LCD @ 1208*1024 ,XP SP3

    我想知道你是怎么情况下发现的错误?麻烦告知 :)

    Slyar 回复:

    Firefox 3.0.3,14.1 1024*768

  23. 2008年10月24日13:27 | #23

    用括号括起来是一个很好的方式

    Slyar 回复:

    恩,的确如此,我也喜欢加括号。

    PS.你的站在FF下错位了。。。

bnuep:0801010047