打印

这二者哪里出问题了?

[复制链接]
1141|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangfeng33|  楼主 | 2013-12-8 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1:if(KM0&(0x0001|0x0002)==0) x=0;
else x=1;
2:if(KM0&(0x0001|0x0002)) x=1;
else x=0;
上面这两个程序,逻辑功能应该是一样的,但是在stm32里运行,第一种方式工作不正常,第二种方式正常,这是什么情况啊?
沙发
戈卫东| | 2013-12-8 21:39 | 只看该作者
这是我第三次看到同样内容的不同贴,再次是在21IC,一次是在CSDN.

首先需要强调, 这两段程序的逻辑是不一样的. 因为&算符的优先级要低于==算符. 所以它们表现不同是必然的. 最后,它们都正常,只是你的理解或使用方法不正确.

使用特权

评论回复
板凳
rtgchym| | 2013-12-9 14:09 | 只看该作者
本帖最后由 rtgchym 于 2013-12-9 14:10 编辑

2楼正解。如果不记得优先级,多加些括号总不会错,if( (KM0 & (0x0001|0x0002) ) == 0 )

使用特权

评论回复
地板
jjjkkk00| | 2013-12-10 14:39 | 只看该作者
哦,天哪!
一眼看上去就是完全不一样的两个东西,看了半天也没发现逻辑怎么会一样?

使用特权

评论回复
5
tianli1980| | 2013-12-10 16:30 | 只看该作者
关键在于KM0的定义,你先将KM0取到一个变量中,然后再比较就OK

使用特权

评论回复
6
cjhk| | 2013-12-10 19:45 | 只看该作者
今天  又学到了一招   感觉还是比较有意思的   顶一个   抽空好好钻研钻研   楼主

使用特权

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

本版积分规则

506

主题

2446

帖子

8

粉丝