C语言基础复习之二--运算符优先级、结合方向自编口诀

前题:这不是一个难题,但有时候会难道英雄好汉。都说我代码中可不会这么写,但面试官可不管这个。于是自己搜集网上资料,并编了一套口诀。

网络上已经有前人贴出了所有运算符的优先级和结合顺序,链接如下:

1 http://www.slyar.com/blog/c-operator-priority.html

已经很明了,其实简单归纳下:

就是括号和取值的优先级最高、单目运算第二、算术运算第三<算术内部还要排名>、位移操作第四、大小比较第五<内部再分高低>、位操作第六、逻辑操作第七、条件第8,它也是唯一的一个三目运算符、复合运算符第九、逗号第10。

结合顺序,除开单目运算、条件运算、复合运算是从右到左意外,其他的都是从左到右。按照这个脉络,自己整理了下:

 

 1"取值圈地"是天王,四大天王在第一:



    "[]""()""."" ->"    从左到右依次结合



2"屈居第二的人,总是孤芳自赏,9个单目列成行":

    

    "-""(强制转换)""++""--""*""&""!""~""sizeof" 从右到左依次结合



3"小李飞刀是高手,加减乘除亦探花""+""-""*""/""%"    从左到右依次结合,按照小学算术优先级结合即可。



4"东跑跑,西跑跑,位移操作、四季发财":

    ">>""<<"        从左到右



5"一较大小,五五分成"">"">=""<""<="        从左到右



6"非黑即白"降一格:

    "==""!="        从左到右



7"三分天下"位操作,"与最先、或最末、疑惑在中间":

    "&""^""|"        从左到右



8"易经八卦,大自然的逻辑""先与后或":

    "&&""||"    从左到右



9"九九归一有条件,你从东来我在西,不是随便可成佛""?:"    从右到左



10"十全十美便复合,临了别忘赋值号":

    "=""/=""*=""%=""+=""-=""<<="">>=""&=""^=""|="    从右到左



11、最后一名是"孙山":

    ","    从左到右

总计为下:

1"取值圈地"是天王,四大天王在第一:

2"屈居第二的人,总是孤芳自赏,9个单目列成行":

3"小李飞刀是高手,加减乘除亦探花"4"东跑跑,西跑跑,位移操作、四季发财":

5"一较大小,五五分成"6"非黑即白"降一格:

7"三分天下"位操作,"与最先、或最末、疑惑在中间":

8"易经八卦,大自然的逻辑""先与后或":

9"九九归一有条件,你从东来我在西,不是随便可成佛"10"十全十美便复合,临了别忘赋值号":

11、最后一名是"孙山":



12"孙山"之外还有言:自古都是男左女右,但这个世界总是充满奇葩--孤芳自赏的、讲条件的、刚刚复合的,偏要女左男右,张扬个性。

说明:

其中算术运算符,我归为一类,但它们遵循四则混合运算规则,凡是小学学习认真了,都会明白;
位移操作和位操作有小小的区别,平常可能说"位操作"就包括了"位移"操作和"位的双目操作"以及"位的单目操作";但这里已经给予了小小的区分,可能不是很合理,但确实有区别。

大小比较运算符比较奇葩,"==“、"!=”在书中没有划到大小比较里面去,这里要小小的注意。于是"非黑即白"优先级较之大小运算符矮了一级。

接下来就是复合运算符中,"="这个本不是复合运算符,但是它的优先级却是划分到了"复合运算符"同一个级别中,可能是K&R觉得它太孤独的原因吧。

然后就是左右结合顺序,其实已经没啥说的了,从右到左,就三个特例:单目、条件、复合。

 

同时,故意写了个"通假词":“疑惑"<=>"异或"。

 

-----------------------------------

代码中,许多前辈高人都已经给出了非常好的建议,关于碰到了运算符的时候怎么写怎么写--我们可以避免非常难读的代码出现。

但除非运气好不笔试就可以直接找到工作,抑或笔试的时候碰不上运算符的考察,也或者说,碰上了都是四则混合运算那么简单。这个概率是有的,它高于中500W的奖的概率;但同时碰上考察运算符的概率也是高于中500W的奖的概率。

-------------------------------------

运算符常见的考察,或者说我自己碰上的一些考察,见于下篇。

 

你可能感兴趣的:(C语言)