【操作符优先级详细】

C语言中的运算符

C语言中的运算符说多也多,说不多也不多,包括以下运算符:

运算符类别运算符
下标引用、函数调用和结构成员[ ]、( )、->、.
单目运算符!、~、++、–、+、-、sizeof、(type)、*、&
算术运算符+、-、*、/、%
移位运算符<<、>>
关系运算符>、>=、<、<=、==、!=
位运算符&、^、|
逻辑运算符&&、||
赋值运算符=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
条件运算符(三目运算符)exper1 ? exper2 : exper3
逗号运算符,

C语言中运算符的优先级

C语言运算符优先级表(由上至下,优先级依次递减)

运算符结合性
( )、[ ]、->、.L-R
!、~、++、–、+、-、(type)、*、&、sizeofR-L
*、/、%L-R
+、-L-R
<<、>>L-R
<、<=、>、>=L-R
==、!=L-R
&L-R
^L-R
|L-R
&&L-R
||L-R
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=R-L
exper1 ? exper2 : exper3R-L
,L-R

帮助记忆优先级的方法

先粗分

优先级最高的其实并不是真正意义上的运算符,包括数组下标、函数调用操作符和各结构体成员选择操作符。

单目运算符的优先级仅次于前述运算符,在所有真正意义是的运算符中,单目运算符的优先级最高。

优先级比单目运算符要低的,接下来就是双目运算符。

双目运算符之后就是三目运算符(条件运算符)。

优先级最低的就是逗号运算符了。
在这里插入图片描述

再细分

需要进一步细分的就是双目运算符了,我们需要记住:在双目运算符中,算术运算符的优先级最高,移位运算符次之,关系运算符再次之,接着就是位运算符,最后是逻辑运算符。

你们可能以为我忘了双目运算符中还有一个赋值运算符,其实赋值运算符算是一个特例:赋值运算符的优先级低于三目运算符(条件运算符)
在这里插入图片描述
需要注意的最重要的两点是:

  1. 任何一个逻辑运算符或位运算符的优先级低于任何一个关系运算符。
  2. 移位运算符的优先级比算术运算符要低,但是比关系运算符要高。

最后吃透

在算术运算符中:*、/、%的优先级高于+、-运算符,这和我们平常的数学算式中要先算乘、除的规则可以对应起来。

关系运算符中:==和!=的优先级要低于其他关系运算符。

在位运算符和逻辑运算符中:每个“与”运算符要比相应的“或”运算符的优先级高,而且按位异或(^)的优先级介于按位与(&)和按位或(|)之间。

因不明确优先级而造成的常见问题

假设hi和low是两个整数,它们的值介于0和15之间,如果r是一个8位(二进制位)整数,且r的低4位与low各位上的数一致,而r的高4位与hi各位上的数一致,那么r如何表示呢?

我们很容易想到这样一句代码:

r = hi<<4 + low;

   
   
  • 1

这句代码的想法是正确的,但是不幸的是,“+”运算符的优先级高于“<<”运算符的优先级,所以这句代码等效于:

r = hi<<(4 + low);

   
   
  • 1

所以正确写法应该是这样的:

r = (hi<<4) + low;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值