C语言的小问题,一直没搞懂

[复制链接]
 楼主| 发表于 2012-9-9 20:12 | 显示全部楼层 |阅读模式
if((P1IFG&0x0002)==0x0002)

0X0002转成二进制是10

请问P1IFG值为多少时,这个条件语句为真

这条语句0x02&0x002==0x0002为真吗?

同样的

00000010b&000000000010b==0000000000000010b吗
 楼主| 发表于 2012-9-9 20:12 | 显示全部楼层
好久了,一直没有搞懂的一个小问题,望高手解答
发表于 2012-9-9 20:23 | 显示全部楼层
P1IFG值为0x0002时成立
那个应为真,因为数值一样
发表于 2012-9-9 20:55 | 显示全部楼层
这个其实就是位检测。只要变量(也就是你这里的P1IFG)的第二位为1,则为真。
发表于 2012-9-9 21:00 | 显示全部楼层
可能那样写的话,为的是确保软件的性能吧!就是P1.1的中断标志位!
发表于 2012-9-9 21:08 | 显示全部楼层
用VC试试,加个什么提示的。。
发表于 2012-9-9 21:12 | 显示全部楼层
0x02&0x002==0x0002这个为真吗?
发表于 2012-9-9 22:35 | 显示全部楼层
4楼正解。0x02=00000010,按位比较,相同则1不同则0只要第二位是1就能得到0x02的结果。
发表于 2012-9-9 22:36 | 显示全部楼层
同3楼,
发表于 2012-9-9 22:39 | 显示全部楼层
同4楼,楼层居然在变,
发表于 2012-9-9 23:38 | 显示全部楼层
转换成2进制   按位运算   全1出1 就行了    8楼的错 了    都是0出的也是0……
发表于 2012-9-10 08:34 | 显示全部楼层
与运算 两个数都都为真结果为真 有一位为假结果为假
发表于 2012-9-10 09:53 | 显示全部楼层
根据与运算规则,当P1IFG为0X0002时才为真.
这条语句0x02&0x002==0x0002是假的.熟悉基本的运算很重要.
发表于 2012-9-10 10:07 | 显示全部楼层
本帖最后由 eyesmall 于 2012-9-10 10:51 编辑
根据与运算规则,当P1IFG为0X0002时才为真.
这条语句0x02&0x002==0x0002是假的.熟悉基本的运算很重要.
chenyaen 发表于 2012-9-10 09:53
0x02&0x002==0x0002为什么是假呢  求科普   没看出哪里假了      且P1IFG 只要第二位为1   P1IFG&0x0002)==0x0002  都为真吧
发表于 2012-9-10 10:22 | 显示全部楼层
只要第1位为1时,此语句就是真
发表于 2012-9-10 12:00 | 显示全部楼层
位检测语句,只要被检测的位为1就成立,其它位是什么不影响
发表于 2012-9-10 12:10 | 显示全部楼层
P1IFG本质上是中断标志寄存器       设为1表示则中断触发    设为0表示中断关闭
发表于 2012-9-10 12:35 | 显示全部楼层
0x02&0x002==0x0002为什么是假呢  求科普   没看出哪里假了      且P1IFG 只要第二位为1   P1IFG&0x0002)==0x0002  都为真吧
eyesmall 发表于 2012-9-10 10:07

因为==运算的优先级高于&运算
所会先计算0x002==0x0002为真,当逻辑值要参与运算时,会提升为int的类型
这里逻辑为真,变成1
然后0x02再与1进行&运算,結果为0
根据规则,当一个数值要进行逻辑运算时,非0为真,0为假
此时結果为0,所以为假
发表于 2012-9-10 20:13 | 显示全部楼层
LZ: P1IFG:中断标志寄存器,其中8个标志位分别对应8个引脚的中断请求。有中断标志寄存器的引脚,说明这个是可以产生中断的,比如外部中断。另外,用4位二进制来表示说明这个端口的每一个引脚都可以产生中断,0x0002,对应二进制是0000000000000010,正好有1的为对应PX.1,if((P1IFG&0x0002)==0x0002)就是由于判断这个引脚是否有中断产生,当有中断产生时P1IFG的值为1,产生该IF语句为真。
发表于 2012-9-10 20:15 | 显示全部楼层
第二位为高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

1390

帖子

1

粉丝
快速回复 返回顶部 返回列表