传感器输出补码进行解码的方法

        拜读了项目中的祖传代码,给人的感觉就是----厚重的包浆感~~~~~~~但是,祖传代码细细阅读也是有很多值得细细玩味的地方,比如对于以补码形式输出的传感器,如何进行快速的解码。

        按照最容易理解的方法,就是按照补码转为原码的运算方法:[x_补]_补=X,正数的原码与补码相同,负数的补码为其反码加1。这样我们不得不再编写一个解码程序。

        一个巧妙的方法思路为:计算机中数据的存储方式是按照补码形式存储的,如果传感器数据输出为32位,那么定义  Int32 x = sensor_output(...),那么x中存储的就为x的补码,如果printf(..,x),那么实际上x就是我们所需要的。 

        如果传感器数据输出为24位负数,即最高位(符号位)为1,那么执行  Int32 x = sensor_output(...)时,x的低24位将会填充为数据的补码,高8位为0,那么此时因为x的最高位(符号位)为0,因此x此时是一个正数,而这不是我们所需要的,因此需要向高位填充1,符合负数的补码形式:x = x|0xff000000.

此步骤相当于8086cpu的符号扩展指令CWB、cwd指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值