众嘲炮:如何记C语言的运算符优先度

2019-12-27 18:54发布

本帖最后由 TBG3 于 2017-4-6 11:46 编辑

好像本论坛大多数程序员不记优先度,用括号来表达。当然是一种解决办法。但是你读别人的程序时呢? 人家不加括号你怎么办?

记的方法,扎实的办法就是死记,效果最好,这里就不做详细介绍了。

就介绍一种简单的方法,就五条。

一是单目运算符,包括数组,结构,++ -- ~ !之类,最优先。 因为神是唯一的神,所以好好敬服他吧。

第二是运算次优先,+ - * / <<  >>,因为资本主义世界,你要算清楚,不然肯定亏。注意这里面移位最不优先,因为人都不乐意地位变化。

第三是关系优先于逻辑,所以 > < == != 优先于与或非,与或非里面,个数多的,优先单个的,也就是说 & | 优先于 && ||

第四就是 赋值最不优先,因为等你都做出来之后,才会赋予你报酬。注意,因为 ? :里面有关系,所以在赋值里面最优先。

第五条是 单目里面的优先度,和2,3,4里面的优先度是一样一样的,赋值里面的优先度也跟2,3是一样一样的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
TBG3
1楼-- · 2020-01-05 02:10
wicy001 发表于 2017-4-6 14:19
一个简单的  *p++  ,你这5条就不管用。

知道++和*的优先度,就很好算了。觉得难就一个原因:概念不清楚。

++优先于*

后置++ 则先取p
TBG3
2楼-- · 2020-01-05 07:39
takashiki 发表于 2017-4-7 09:14
精通优先度的LZ,请解释下我31楼的问题,不要采用我55楼的回答。作为一个精通优先度的人,您一定是看不上 ...

已经解释过了。

++ --前置与后置不在优先度里面。

++ -- 是数学运算,优先于取内容的*, 取地址的&。

++ -- 前置,则取运算后的变量值;++ -- 后置,则在表达式中取变量原来的值。

TBG3
3楼-- · 2020-01-05 12:04
takashiki 发表于 2017-4-7 09:15
然后请您给解释下 a  = b[a] + a++;的优先级关系,到底先算b[a]还是先算a++。

这个更简单。

其实你了解到处理器是顺序执行的,就可以了。
takashiki
4楼-- · 2020-01-05 13:52
 精彩回答 2  元偷偷看……
wochai
5楼-- · 2020-01-05 18:07
()
还能多算代码工作量!
takashiki
6楼-- · 2020-01-05 20:45
TBG3 发表于 2017-4-7 09:26
这个更简单。

其实你了解到处理器是顺序执行的,就可以了。

你倒是算出个结果出来啊。
  1. int a = 0;
  2. int b[] = {0, 1, 2};
  3. a = b[a] + a++;
复制代码
你算出来a是等于0还是等于1啊,不同的编译器会给出不同的结果哦,我看看您属于哪一类?

我在VC++下算出来等于1,在TCC下面算出来等于0。精通优先级的LZ,您算出来等于多少?

一周热门 更多>