C陷阱篇之运算符优先级
来源:互联网 发布:mysql 最近一条记录 编辑:程序博客网 时间:2024/04/24 03:42
C语言运算符有不同优先级,标准里对这些优先级的规定基本符合人们的正常认知习惯,但其中还有个别容易混淆。其实也不需要死记硬背所有优先级,只要注意几个例外就可以了:
“+-”与”>>”运算符
因为<<和>>某些情况下相当于乘/除2n,很多人总认为它们的优先级也等于乘除而高于加减,但实际上移位运算优先级比加减低。这跟惯常思维不一致,所以当移位加减一起用时一定要注意。比如有人把n*5写成“res=n<<2+n”,但由于n<<2移位的优先级比加法低,结果实际变成“res = n<<(2+n)”,导致bug,要额外加括号改变默认计算顺序:res = (n<<2)+n;
运算符”==”和”!=”与 &、^、|、&&、||等的优先级
==和 !=运算符优先级要高于 &、^、|、&&、||运算符,但我们一般倾向把==和!=作为逻辑判断表达式的核心符号,由此形成的默认逻辑就是“先计算两边后进行逻辑判断”,这就错误地假设==与!=优先级低于其他运算符。比如:
void main()
{
if( 0 & 1 == 0) printf("0 & 1 == 0\n");
else printf("0 & 1 != 0\n");
}
结果:0 & 1 != 0。不是某些人认为的:0 & 1 == 0。因为if( 0 & 1 == 0)相当于 if( 0 & (1 == 0) )所以执行了else分支。
这里不想总结一堆规则去背诵,因为“淹死的多数会游泳”,死记硬背也免不了疏漏,不确定反而让人保持警惕。有了这份警惕,对不确定的优先级可以:
1)分解长表达式:君子不立危墙之下,有简单安全的可用,干嘛自找麻烦呢?
2)非要用长表达式的勤加括号:勤能补拙,安全第一嘛。- C陷阱篇之运算符优先级
- c缺陷与陷阱之运算符的优先级
- C语言运算符优先级理解记忆,语法“陷阱”
- C陷阱篇之移位运算
- C语言运算符优先级之三字经
- C语言运算符优先级之歌
- c++primer之运算符优先级表
- c语言之运算符优先级
- C语言陷阱之优先级学习小结
- c 运算符 优先级
- c 运算符 优先级
- C运算符优先级
- c运算符优先级
- C运算符优先级
- C运算符优先级
- C运算符优先级
- c运算符优先级
- c运算符优先级
- android 数据库用sql语句的 crud
- tomcat学习笔记(二) 模拟一个简单的servlet容器
- 我来了 csdn
- Android JNI抛出异常处理
- java编码问题(中文乱码的原因)
- C陷阱篇之运算符优先级
- Business Analyst
- with rollup技巧
- tweepy(Twitter API) status object
- 一个基于 exosip 库的 UAC 和 UAS 的代码整理
- Daily article(7)
- 《黑马程序员》io---流初识
- post和get的区别
- AFNetworking2.0 NSHipster翻译