最新消息:点击查看大S的省钱秘笈

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

编程相关 Slyar 3473浏览 0评论

文章作者:姜南(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

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

说明:

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

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

转载请注明:Slyar Home » C语言运算符优先级 详细列表

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (78)

  1. *p++ 从左到右还是右到左的顺序对它的的最终的值是没什么影响的!
    赵庆2年前 (2014-11-13)回复
  2. *p++,刚才试了下看了指针地址,*p++,*和++同级,按照从左到右顺序,线*p,然后++
    红亮13年前 (2013-12-27)回复
    • *p++按照从右往左结合是*(p++),而p++运算本身是先返回p用于外层计算,然后再执行p++的。所以整个运算过程看上去是*p ; p++,容易令人以为结合顺序是从左往右的
      小天2年前 (2014-07-08)回复
      • 哥 高手啊 !!!不要跟他们计较 这点不是菜鸟能看出来的.
        YY2年前 (2014-09-08)回复
      • 明眼人啊
        Domi2年前 (2014-10-20)回复
        • 楼上2位真是人云亦云,不知道你们有没有真实去实验,我测试的结果跟楼主说的相反,结果证明“*p++,虽然*和++是同一优先级,但是你要往右看啊,,都说了是从右向左,也就是右结合性啊。。。所以先++再*,相当于*(p++)”,这个是对的。
          guest2年前 (2014-12-29)回复
  3. 这个表犯了这么明显的错误,而且下面还有人为这个错误辩护:前置自增/自减和后置自增/自减优先级并不相同。
    ervin_zhao3年前 (2013-09-21)回复
    • 建议博主查查资料修一下这个表,免得误导更多人。
      ervin_zhao3年前 (2013-09-21)回复
      • 亲,这是C,不是C++
        synapse3年前 (2013-09-24)回复
        • C的前置和后置也不是一个优先级啊。
          ervin_zhao3年前 (2013-09-24)回复
          • 翻了下《C Primer Plus》(第五版)中文版,126页上表6.2中注明:“所有的一元运算符具有相同的优先级”。
            synapse3年前 (2013-09-25)
          • 你看书都不看上下文的?那个表说的是“迄今为止”,然后后面还有一句:参考资料2"C运算符“有全部运算符的完整优先级列表。然后你翻到572页再看看那个完整的版本。 真受不了,这么基础的问题。。。。
            ervin_zhao3年前 (2013-09-25)
          • 不懂还装大个, 不看结合顺序的吗? 前置后置都是单目运算, 单目运算从右向左结合, 因为后置自增总在右边, 所有看上去后置的优先级更高. 按你的意思, 因为a*b/c 等同于 (a*b)/c, 所以乘法比除法优先级更高? 真是蠢得没形式.
            Jason3年前 (2013-09-27)
          • 无力吐槽,滚去查资料好么?脑子已经笨到连资料都不会查了么?
            ervin_zhao3年前 (2013-09-27)
          • ervin_zhao是对的,在《C Primer Plus》259页可以找到答案,还要参考书本最后一页的“C运算符”表!
            3年前 (2014-06-15)
  4. 二货,*p++,虽然*和++是同一优先级,但是你要往右看啊,,都说了是从右向左,也就是右结合性啊。。。所以先++再*,相当于*(p++)
    abc3年前 (2013-09-09)回复
    • 不是吧 应该是 *p这已经是从右向左了 然后再(*p)++
      z0rro3年前 (2013-09-10)回复
    • 你是对的,实验测试结果同你所说。
      guest2年前 (2014-12-29)回复
  5. 张学连3年前 (2013-08-09)回复
  6. 很好哈帮了大忙
    4年前 (2013-06-15)回复
  7. c==4年前 (2013-05-31)回复
  8. 未定义行为
    4年前 (2013-05-10)回复
  9. 如果是可以下载就安逸了,
    丨乌托邦丶4年前 (2013-04-24)回复
  10. 很好。
    hihi4年前 (2013-04-01)回复
  11. *p++ ,是先算*还是++呢,按上面的优先级顺序,应该是先++,与实际不符啊????
    啊亮4年前 (2013-02-28)回复
    • p++是先引用p再自增。++p是先自增后引用
      leileioww4年前 (2013-03-09)回复
    • 你说+和—先算谁啊?谁在前先算谁嘛 同一优先级 看先后和结合
      呵呵4年前 (2013-05-30)回复
    • ++ 和 * 是同一级别的,应该是先++啊
      儿童热4年前 (2013-06-20)回复
    • 先++。后置++优先级高于一元*。上面的表有问题。
      Sunchy3213年前 (2013-08-08)回复
    • 同级运算,从左到右啊!
      fireman3年前 (2013-08-20)回复
  12. 很有用,转载了,谢谢。
    Victorique0004年前 (2013-01-31)回复
  13. 整理的非常棒,有指导意义,但编程时语句尽量不要写的太复杂。
    海纳百川4年前 (2013-01-23)回复
  14. 同一优先级的运算符,运算次序由结合方向所决定。反对 博主这句话 运算次序 准确说 求值顺序是不明确的 优先级 和 结合性 无法决定求值顺序
    AABB4年前 (2013-01-22)回复
  15. the c programming language 里面的图例
    zzc天下第二4年前 (2013-01-10)回复
  16. 可以啊*p ,星号 是类型说明符,&i 取 i 的地址 把它赋给指针 p 啊
    C4年前 (2012-12-21)回复