您的位置:首页 > 编程语言 > C语言/C++

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

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

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

http://www.slyar.com/blog/c-operator-priority.html[/code] 
已经很明了,其实简单归纳下:

就是括号和取值的优先级最高、单目运算第二、算术运算第三<算术内部还要排名>、位移操作第四、大小比较第五<内部再分高低>、位操作第六、逻辑操作第七、条件第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的奖的概率。

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

运算符常见的考察,或者说我自己碰上的一些考察,见于下篇。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: