【转】运算符优先级

由于一直弄不清楚运算符的优先级,所以找了这么一篇文章过来学习


 

本文仅适用于怎么也记不住运算符优先级顺序的人,已经记住了的就飘过吧 ~~ 

估计很多初学 C 语言的人都会碰到这么一个问题: C 运算符太多太复杂,优先级顺序难记,背了还是忘。那怎么办呢? 

在实际写程序的过程中倒还好,实在不知道哪个先哪个后,咱就给它加个括号,而且给程序中添加适当的括号也是非常推荐,值得表扬的,是一个很好的编程习惯。 

可是问题又来了,考试(比如说期末考试、等级考试。。)的时候出卷老师可不跟你来这套,他就是不用括号,然后就看着你得意地笑:小样,猜个答案吧 …… 

结果往往是以我们的失败而告终! 

像我标题所说的,如何快速、准确、轻松地记住 C 语言的运算符优先级顺序呢?(下面的内容都出自《 C Traps and Pitfalls 》,不过我用简单点的语言给概括一下) 

首先来张图 ,别晕,仔细看看还是层次分明的

 


咱们就来解释一下这张图的内容,下面就单刀直入,不废话了 

这是 C 语言中所有运算符优先级的表,左边一个大箭头一看就知道:从上到下,优先级依次降低; 

然后看整体最粗的蓝色线,它将所有的运算符分为六个部分,最上面 4 个优先级最高,书上说它们其实不算严格意义上的运算符,记住就行了,应该没啥问题;接下来有点多了,不过他们有个通称就是  单目运算符  ;再接下来最多的那个,怎么记呢?  双目运算符  ;再接下来这一个你肯定猜到了:  三目运算符  ;紧随其后的就是赋值运算符了,注意这里包涵很多种的赋值运算符: =  op= ;逗号运算符优先级最低; 

上面的弄懂了的话,对于运算符优先级的掌握就成功一大半了,其中要注意单目、三目和赋值运算符的结合性是自右向左的 

然后就到了中间最大一块了,如何记住双目运算符之间的优先级呢?四个字:数移关逻。数学 > 移位 > 关系 > 逻辑,简单吧? 

数学运算符,小学生都知道,先乘除(这里加个模)后加减; 
移位就没啥说的了; 
关系运算符中,大小判断优于等于判断; 
逻辑运算符下面又有点小复杂 ,黄色的线将上下一分为二,按位逻辑 > 顺序逻辑;同时逻辑与 > 逻辑或;按位异或 ^ 居于与或之间。 

所有的 C 语言运算符优先级和结合性都介绍完了,简单吧? 

如果你以前没记住又看得比较快,估计到这里你还是没记住,没关系,无穷循环,记住了就 break  

给个小例子 
在使用指针的时候经常碰到诸如 *p++  (*p)++ 这样的东东,现在是不是一眼就看明白了? *  ++ 都是单目运算符,优先级相同,自右向左 ……

posted @ 2013-08-16 11:18  大器天下  阅读(447)  评论(0编辑  收藏  举报