C语言运算符优先级总结

C语言共有15个操作符优先级,从高到低如下

1   ()  []  .  ->

2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof (注意这也是操作符,不是函数)

3   * / %

4   + - 

5   >> <<  

6   > >= < <= 

7   == !=   

8   &  

9   ^   

10  |   

11  &&

12  ||

13  ?:

14   =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=

15  ,逗号运算符

结合性:分为左结合性(即从左到右)和右结合性(从右到左)

优先级中只有三个优先级是右结合性:

0. 单目运算符:包括-,+,++,--,*(指针取值运算符),&(取地址运算符),~,sizeof等

1. 条件运算符 ?:

3.赋值运算符 :包括=,/=,+=,-=,*=,<<=,>>=,|=,%=等

其中均为左结合性,分析操作符时,先看优先级再看结合性

规律如下:其实具有最高优先级的操作符并不算真正的操作符,均为一种特殊操作,其中()和函数有关,[]和数组有关,->,.和结构成员有关

次级运算符便是单目运算符,所有单目运算符具有相同的优先级,按结合性也就是右结合性来计算,由此可见单目运算符才是真正的优先级最高的操作符。

括号成员第一

全体单目第二 (算术运算符等)

移位紧随第三

关系移位后,有点不服气  (<<=,>>=竟然关系==,!=优先级高)

位在逻辑前面走 (&,^,|)

逻辑再靠后 当然除单目 (其实就剩或||和与&&)

条件高赋值 (?:)

赋值只能排倒二 (=,-=,+=。。。)

逗号永远倒一,威武霸气不解释

关于sizeof也要注意,不是函数啊哥,只是操作符,C专家编程提出的问题:apple = sizeof(int)*p结果会是多少

分析:sizeof为单目运算符,()优先级最高,*可能为乘法运算,可能为指针取地址运算符,这样与sizeof优先级一样

经验证,先执行sizeof(int) 再执行*p,即*为乘法

其执行时从左到右,用int a = sizeof (8)*20 验证发现结果为80,可见执行过程确实如上,若把20换为指针,语法会出错


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值