C语言算符优先级记忆之我的观点

C语言算符优先级记忆之我的观点

一共有十五个优先级: 同一优先级的运算符,运算次序由结合方向所决定

  1.   ()  []  .  ->        (括号,成员排第一)
  2.  !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof       (单目运算排第二)
  3.  * / %         (乘除余三)
  4.  + -             (加减四)
  5. >> <<          (移位五)
  6.  > >= < <=     (关系六)
  7.  == !=           (等于不等排第七)
  8. &             (位“与”) 
  9. ^               (”异或“)
  10.  |               (和位"或")三分天下八九十
  11. &&            (逻辑 ”与“)
  12. ||                (和”或“)十一和十二
  13. ?:                (条件运算符)
  14.  =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=    (条件高于赋值)
  15.  ,             (逗号优先级最低)

        如果真的把15个等级都一清二楚记住了,我觉得你肯定会非常抓狂,再说也不可能完完全全非常精确地记住,因为人的记忆力是会衰减的,而且,每一门语言的运算符优先级都不太一样,记住C的,就会和Java,JavaScript,Python的搞混,说不定得不偿失。

        那么我们平常编程,如果不敢保证哪个算符优先级更高,我们就用()括号吧。但是,如果我们不适当地记住一些优先级,那么看别人的不爱带括号的代码,那就容易看不懂。

        总而言之,我们有必要适当地记一下运算符的优先等级。

我们看图,会发现:

  • 最重要的一句话:括号和成员算符>单目>双目>三目(?:)>赋值运算符
  • 再看双目运算符里的,我们最常用的无非就是乘、除、模、加、减了,既然在双目运算符里,最常用的符号是这些,那么其优先级也应该是最高的嘛。语言的设计要方便开发,最常用的符号优先级更高,可以减少我们使用()括号的频率,有利于开发,可读,想想也是非常通达情理、人性化的事情嘛,这个应该很好记住吧,哈哈。
  • 接下来就是移位运算符和关系运算符啦,>> 、<<   高于 < 、> 、<= 、>=  高于   == 、!= ,我有一个不成文的记忆技巧那就是,你看到>和<这个两个符号,它的数量越多,等级就越高,你看<<和>>有两个,< 、> 、<= 、>=只有一个,而==和!=有零个。
  • 再往下就是逻辑运算符了,按位与、按位异或、按位或(&、^、|)  高于    逻辑与、逻辑或(&&、||)   ,按位X的运算速度远远快于逻辑X的运算速度,所以算符优先等级也更大。注意(按位非 !  并不在按位X这里,因为按位非是单目运算符哦,要记住!)
  • 然后就是按位与>按位异或>按位或>逻辑与>逻辑或,这个就用你自己的方法来记住呗,我也没啥好方法哈....
  • 最后的最后,就是赋值运算符啦,既然是赋值,那可以这样想,我们正常来说,是不是应该把所有的运算都算完了,该做的事情都做了,最后才进行赋值呢?哈哈,没错,赋值运算符的等级是倒数第二低的,等级最低的是逗号(,)。