OpenEdv-开源电子网

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

关于移位和补码的相关问题

[复制链接]

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2015-1-28
在线时间
50 小时
发表于 2015-3-15 16:57:23 | 显示全部楼层 |阅读模式
5金钱
一共有两个问题,分别描述如下,各位老师和朋友如果能回答如下任何一个问题都不胜感激:
问题一:
调试hmc5883l传感器,用BUF分别储存三个轴的测量数据,比如x轴的高8位数据存在BUF[0]中,低八位存在BUF[1]中,通过如下操作合并高低8位寄存器的值。我能理解这段代码的操作意图,但是不明吧其具体是如何操作的,问题如下的:
比如说BUF中的值是:00111001(我不知道是不是该用二进制表示),BUF[0]<<8结果是多少?是0000 0000还是00111001 00000000.

[mw_shl_code=c,true]BYTE BUF[8]; x = BUF[0] << 8 | BUF[1]; y = BUF[4] << 8 | BUF[5]; z = BUF[2] << 8 | BUF[3]; [/mw_shl_code]
问题二:
在获得x,y轴的数值之后,我参考的程序用一下方法计算角度。具体的计算不需要关注,问题是技术手册(见下图)中说x,y寄存器中的数值是以二级制补码的形式存在的。所以我如下问题:
二进制的补码用(double)进行强制类型转换后的结果是什么,补码是正数的话没问题,如果补码要是负数结果是什么东西?
[mw_shl_code=c,true]angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180; // angle in degrees[/mw_shl_code]




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-16 00:07:07 | 显示全部楼层
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-3-16 16:21:01 | 显示全部楼层
问题一:
我觉得在stm32这样的主控芯片里,BUF[0]<<8的结果应该是00111001 00000000 因为主控芯片是32bit的虽然定义的是个8位的变量,实际操作的是32的寄存器。但是如果是51单片机的话,BUF[0]<<8的结果肯定是0000 0000,这个是因为处理器里的寄存器8bit的。
当然x变量类型的定义能不能放得下也是个问题。
问题二:
先声明下:补码是不区分正负的!
正数的补码=其本身
负数的补码=其反码+1
其实补码就是个正数(可以这么理解)。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2015-1-28
在线时间
50 小时
 楼主| 发表于 2015-3-16 17:04:09 | 显示全部楼层
111
回复

使用道具 举报

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2015-1-28
在线时间
50 小时
 楼主| 发表于 2015-3-16 17:25:50 | 显示全部楼层
回复【3楼】fanghuiopenedv:
---------------------------------
谢谢fanghuiopenedv
 65的补码是0100 0001,(double)后,即强制类型转换后,还是65
-65的补码是1011 1111,如果不考虑首位是符号位并且将补码强制类型转换后,是否就变成了191?
这样是否就出现了运算错误呢?
上面那份代码好像很多人用过,在网上流传很广,不知道我应该如何处理
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-3-16 18:03:40 | 显示全部楼层
可能和x定义成有符号的变量有关吧。如果定义成x为无符号的就不行了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

12

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2015-1-28
在线时间
50 小时
 楼主| 发表于 2015-3-16 18:17:16 | 显示全部楼层
 回复【6楼】 fanghuiopenedv :
---------------------------------
谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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