OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4018|回复: 13

一个奇怪的问题

[复制链接]

18

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2016-8-11
在线时间
64 小时
发表于 2016-11-23 21:24:29 来自手机 | 显示全部楼层 |阅读模式
今天遇到个奇怪的问题,耗了我半天。一个标志位a,a=0xb000。主循环中,if((a&0x8000)==1),这个判断成立不了,不知道为什么?有没有大神能给我解释一下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-11-23 21:28:45 | 显示全部楼层
if((a&0x8000)==1)怎么可能会==1 ? 要么等于0,要么等于0x8000
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-23 21:32:31 | 显示全部楼层
呵呵,楼主笔算下结果相等不
回复 支持 反对

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-11-23 21:36:21 | 显示全部楼层
还是写成if(0 !=(a&0x8000))好一点
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-23 21:58:33 | 显示全部楼层
直接 if(a&0x8000){} 省事。
回复 支持 反对

使用道具 举报

18

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2016-8-11
在线时间
64 小时
 楼主| 发表于 2016-11-23 22:15:59 来自手机 | 显示全部楼层
我就是写if(a&0x8000)不对,才改的。问题是为什么不对
回复 支持 反对

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-11-23 22:18:27 | 显示全部楼层
BigDiong 发表于 2016-11-23 22:15
我就是写if(a&0x8000)不对,才改的。问题是为什么不对

if(!(a&0x8000)) //这样写大多编译器都可以正常运行
回复 支持 反对

使用道具 举报

18

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2016-8-11
在线时间
64 小时
 楼主| 发表于 2016-11-23 22:20:29 来自手机 | 显示全部楼层
还有,如果一定要写等于的话,只能写0x8000嘛?
回复 支持 反对

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-6-15
在线时间
474 小时
发表于 2016-11-23 22:23:51 | 显示全部楼层
BigDiong 发表于 2016-11-23 22:20
还有,如果一定要写等于的话,只能写0x8000嘛?

这个跟编译器有关系,正常情况下
if(a&0x8000)

if((a&0x8000)==0x8000) //都可以
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-23 22:24:10 | 显示全部楼层
本帖最后由 憨厚诚实大叔 于 2016-11-23 22:25 编辑
BigDiong 发表于 2016-11-23 22:15
我就是写if(a&0x8000)不对,才改的。问题是为什么不对

真的假的,你自己硬件调试看看,这一步能成立不。肯定你那里改变变量了,或者逻辑不对不到这一步。
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-23 22:26:10 | 显示全部楼层
BigDiong 发表于 2016-11-23 22:20
还有,如果一定要写等于的话,只能写0x8000嘛?

楼主找个数,跟0x8000与运算得出另外一个非0的结果看看
回复 支持 反对

使用道具 举报

18

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2016-8-11
在线时间
64 小时
 楼主| 发表于 2016-11-23 22:50:10 来自手机 | 显示全部楼层
憨厚诚实大叔 发表于 2016-11-23 22:26
楼主找个数,跟0x8000与运算得出另外一个非0的结果看看

我以为1能代表逻辑真。是我搞错了
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-23 23:03:24 | 显示全部楼层
BigDiong 发表于 2016-11-23 22:50
我以为1能代表逻辑真。是我搞错了

一般编译器支持 TRUE  为逻辑真 可以试试 不行自己定义一个 真。非0
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-24 08:45:38 | 显示全部楼层

会不会是优化惹的事,
这句根本就是无效的?


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 10:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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