C语言中运算符优先级

今天写代码被一个Bug卡了很久,认真定位后发现是运算符优先级不明导致的,一直以为移位运算符(>>,<<)既然被当成乘和除来使用,那其优先级自然也像乘除(*,/)一样,比加和减(+,-)高,事实上想当然了,(+,-)的优先级是比(>>,<<)高的,例如,计算2的5次幂减1,(1<<5-1)得到的结果却是16。因此,对运算符有一个较为深刻的记忆还是有必要的,可以避免编码时无意间引入bug。

C语言中运算符中优先级如表1。

C语言中运算符优先级_第1张图片
表1

可以看出运算符的优先级别较多,共有15个优先级,而运算符的数量则更多,精准记忆是比较困难的,因此有人编了几句口诀,以助记忆,我觉得还不错,有帮助。
参考 http://blog.csdn.net/skywalker_leo/article/details/6237222

初等单目一二级 // 初等运算符和单目运算符分别是第1、2优先级
乘除求余加减移// 这句里面的运算符全归为算术运算符,移表示移位
关系等于不等于 // 关系运算符(< <= > >=)
按位与来异或或 // 位运算符优先级顺序: & -> ^ -> |
逻辑与或条件弱 // 逻辑运算符优先级顺序: && -> ||,后面跟着优先级比较低(弱)的条件运算符
赋值逗号一点破 // 赋值,逗号最低

你可能感兴趣的:(C语言中运算符优先级)