打印
[应用相关]

运算符优先级引发的bug

[复制链接]
616|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
磨砂|  楼主 | 2018-9-15 07:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文地址:https://blog.csdn.net/zhzht19861011/article/details/5980218

这个错误也是好久前的了.


错误描述:在一个程序中,我想判断一个寄存器与(&)上(1<<17)后是否等于0,代码如下:

             if(IO0SET&(1<<17)==0)


这样写其实是得不到正确的结果的,因为我忽略了"=="的优先级是大于"&"的.按照上面的代码分析:因为"=="的优先级大于"&",所以程序先判断(1<<17)是否等于0?发现这是不相等的,所以(1<<17)==0表达式的值为假,即为0,0与(&)上任何一个数都是0,所以IO0SET&(1<<17))==0整个表达式的值永远为0,这失去了原本意图。


按照原意,应该这样写:

              if((IO0SET&(1<<17)))==0)


通过这一个小小的错误,让我认识到一些东西:

1.我的**力是不可靠的.

2.鉴于第1条,运算符的优先级我要尽量的少记,就记住加减乘除的优先级.

3.加减乘除以外的优先级按照逻辑加括号(我狂加括号,让编译器郁闷吧).


沙发
mmuuss586| | 2018-12-23 17:51 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

94

主题

4126

帖子

2

粉丝