C语言算符优先级记忆之我的观点
2018-03-11 11:33
330 查看
一共有十五个优先级: 同一优先级的运算符,运算次序由结合方向所决定
() [] . -> (括号,成员排第一)
! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof (单目运算排第二)
* / % (乘除余三)
+ - (加减四)
>> << (移位五)
> >= < <= (关系六)
== != (等于不等排第七)
& (位“与”)
^ (”异或“)
| (和位"或")三分天下八九十
&& (逻辑 ”与“)
|| (和”或“)十一和十二
?: (条件运算符)
= += -= *= /= %= |= ^= &= >>= <<= (条件高于赋值)
, (逗号优先级最低)
如果真的把15个等级都一清二楚记住了,我觉得你肯定会非常抓狂,再说也不可能完完全全非常精确地记住,因为人的记忆力是会衰减的,而且,每一门语言的运算符优先级都不太一样,记住C的,就会和Java,JavaScript,Python的搞混,说不定得不偿失。
那么我们平常编程,如果不敢保证哪个算符优先级更高,我们就用()括号吧。但是,如果我们不适当地记住一些优先级,那么看别人的不爱带括号的代码,那就容易看不懂。
总而言之,我们有必要适当地记一下运算符的优先等级。
我们看图,会发现:
最重要的一句话:括号和成员算符>单目>双目>三目(?:)>赋值运算符
再看双目运算符里的,我们最常用的无非就是乘、除、模、加、减了,既然在双目运算符里,最常用的符号是这些,那么其优先级也应该是最高的嘛。语言的设计要方便开发,最常用的符号优先级更高,可以减少我们使用()括号的频率,有利于开发,可读,想想也是非常通达情理、人性化的事情嘛,这个应该很好记住吧,哈哈。
接下来就是移位运算符和关系运算符啦,>> 、<< 高于 < 、> 、<= 、>
4000
;=
高于 == 、!= ,我有一个不成文的记忆技巧那就是,你看到>和<这个两个符号,它的数量越多,等级就越高,你看<<和>>有两个,< 、> 、<=
、>=只有一个,而==和!=有零个。
再往下就是逻辑运算符了,按位与、按位异或、按位或(&、^、|) 高于 逻辑与、逻辑或(&&、||)
,按位X的运算速度远远快于逻辑X的运算速度,所以算符优先等级也更大。注意(按位非 ! 并不在按位X这里,因为按位非是单目运算符哦,要记住!)
然后就是按位与>按位异或>按位或>逻辑与>逻辑或,这个就用你自己的方法来记住呗,我也没啥好方法哈....
最后的最后,就是赋值运算符啦,既然是赋值,那可以这样想,我们正常来说,是不是应该把所有的运算都算完了,该做的事情都做了,最后才进行赋值呢?哈哈,没错,赋值运算符的等级是倒数第二低的,等级最低的是逗号(,)。