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

2019-12-27 18:54发布

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

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

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

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

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

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

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

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

第五条是 单目里面的优先度,和2,3,4里面的优先度是一样一样的,赋值里面的优先度也跟2,3是一样一样的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
laoshuhunya
1楼-- · 2020-01-07 12:07
 精彩回答 2  元偷偷看……
TBG3
2楼-- · 2020-01-07 12:53
a挡住了,重传。

t2.jpg (54.47 KB, 下载次数: 0)

下载附件

2017-4-7 11:30 上传

huangqi412
3楼-- · 2020-01-07 16:12
看来楼主没遇到过不加括号在各种编译器下结果都不同。。。
TBG3
4楼-- · 2020-01-07 21:47
huangqi412 发表于 2017-4-7 11:33
看来楼主没遇到过不加括号在各种编译器下结果都不同。。。

符号优先度是没有疑问的,不会有混淆的结果。

后面的讨论就很深入了。
前置后置++--是会有不同的。

有时候,甚至加括号都没有用! 不要以为括号万能。

比如
*p++ 和 *(p++)

所以,我在编程时,也的确如takashiki所言,一般都是把++ -- 单独弄出来。

另外,takashiki是日本人吗? 没别的意思,我认为现在日本社会大致上实现了东亚文明的理想。但是还是比不过西方人。
wshtyr
5楼-- · 2020-01-08 03:45
编了不少代码,进了无数坑,发现写代码和开车一样,想不翻车必须随时做到3个字:不要浪!

具体的说,就是:

1. 记一些常用运算符的优先级,其余一律用括号。
这没什么low的,括号除了有指定优先级的作用外,还能反映作者的思路。括号太多了怎么办?分行写,或者写成宏。分行使过程更清晰,宏可读性更高,更方便维护。

2. 不要低估了编译器的优化能力,充分利用它。
写一些没有歧义的代码,优化的事让编译器去做吧,程序员要做的,是写出逻辑上正确,并且方便阅读和交流的代码。

3. 不要有任何违和感。
代码不开优化没问题,开了优化就不正常了,那么是关优化还是改代码? 关优化几秒钟就解决了,改代码也许需要几小时。但这几小时,可以避免将来某个严重bug爆发带来的重大损失。

4. 综合考虑效率,不要过度抠细节
有两层意思,一是在程序运行效率和开发/维护效率之间找平衡点,二是重点优化影响系统性能的瓶颈部分。

5...

唉。。说多了都是泪
TBG3
6楼-- · 2020-01-08 05:27
 精彩回答 2  元偷偷看……

一周热门 更多>