前题:这不是一个难题,但有时候会难道英雄好汉。都说我代码中可不会这么写,但面试官可不管这个。于是自己搜集网上资料,并编了一套口诀。
网络上已经有前人贴出了所有运算符的优先级和结合顺序,链接如下:
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的奖的概率。
-------------------------------------
运算符常见的考察,或者说我自己碰上的一些考察,见于下篇。