打印

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

[复制链接]
4007|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
meishizhaoshi|  楼主 | 2012-9-9 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
meishizhaoshi|  楼主 | 2012-9-9 20:12 | 只看该作者
好久了,一直没有搞懂的一个小问题,望高手解答

使用特权

评论回复
板凳
wangjinlili| | 2012-9-9 20:23 | 只看该作者
P1IFG值为0x0002时成立
那个应为真,因为数值一样

使用特权

评论回复
地板
teabottle| | 2012-9-9 20:55 | 只看该作者
这个其实就是位检测。只要变量(也就是你这里的P1IFG)的第二位为1,则为真。

使用特权

评论回复
5
taihezhibanh| | 2012-9-9 21:00 | 只看该作者
可能那样写的话,为的是确保软件的性能吧!就是P1.1的中断标志位!

使用特权

评论回复
6
heibaiyinjiag| | 2012-9-9 21:08 | 只看该作者
用VC试试,加个什么提示的。。

使用特权

评论回复
7
sishangcine| | 2012-9-9 21:12 | 只看该作者
0x02&0x002==0x0002这个为真吗?

使用特权

评论回复
8
yy251745080| | 2012-9-9 22:35 | 只看该作者
4楼正解。0x02=00000010,按位比较,相同则1不同则0只要第二位是1就能得到0x02的结果。

使用特权

评论回复
9
菜鸟同学| | 2012-9-9 22:36 | 只看该作者
同3楼,

使用特权

评论回复
10
菜鸟同学| | 2012-9-9 22:39 | 只看该作者
同4楼,楼层居然在变,

使用特权

评论回复
11
P__204| | 2012-9-9 23:38 | 只看该作者
转换成2进制   按位运算   全1出1 就行了    8楼的错 了    都是0出的也是0……

使用特权

评论回复
12
tianm| | 2012-9-10 08:34 | 只看该作者
与运算 两个数都都为真结果为真 有一位为假结果为假

使用特权

评论回复
13
chenyaen| | 2012-9-10 09:53 | 只看该作者
根据与运算规则,当P1IFG为0X0002时才为真.
这条语句0x02&0x002==0x0002是假的.熟悉基本的运算很重要.

使用特权

评论回复
14
eyesmall| | 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  都为真吧

使用特权

评论回复
15
dzguang| | 2012-9-10 10:22 | 只看该作者
只要第1位为1时,此语句就是真

使用特权

评论回复
16
joyme| | 2012-9-10 12:00 | 只看该作者
位检测语句,只要被检测的位为1就成立,其它位是什么不影响

使用特权

评论回复
17
hawksabre| | 2012-9-10 12:10 | 只看该作者
P1IFG本质上是中断标志寄存器       设为1表示则中断触发    设为0表示中断关闭

使用特权

评论回复
18
lxyppc| | 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,所以为假

使用特权

评论回复
19
wjzx111056| | 2012-9-10 20:13 | 只看该作者
LZ: P1IFG:中断标志寄存器,其中8个标志位分别对应8个引脚的中断请求。有中断标志寄存器的引脚,说明这个是可以产生中断的,比如外部中断。另外,用4位二进制来表示说明这个端口的每一个引脚都可以产生中断,0x0002,对应二进制是0000000000000010,正好有1的为对应PX.1,if((P1IFG&0x0002)==0x0002)就是由于判断这个引脚是否有中断产生,当有中断产生时P1IFG的值为1,产生该IF语句为真。

使用特权

评论回复
20
51xlf| | 2012-9-10 20:15 | 只看该作者
第二位为高

使用特权

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

本版积分规则

103

主题

1390

帖子

1

粉丝