关于补码数据的小问题。某传感器传输的数据是由高低八位两个寄存器储存的16位补码数据。由下节代码融合
关于补码数据的小问题。某传感器传输的数据是由高低八位两个寄存器储存的16位补码数据。由下节代码融合成一个数据:inttemp=(H<<8)+L;那么请问temp中的数据是...
关于补码数据的小问题。某传感器传输的数据是由高低八位两个寄存器储存的16位补码数据。由下节代码融合成一个数据: int temp =(H<<8)+L; 那么请问temp 中的数据是什么形式的数据?还是补码吗?如果要继续得到数据的真实值,该怎么写代码? 给高追加分!
展开
2个回答
展开全部
因题目中所说数据是补码形式存储,故temp也是补码。移位有算术移位和逻辑移位,对于源码,补码,反吗操作各不相同,这都是由内部逻辑器件设计的,但如果没有移位丢失数据的情况下。他们结果都是相同的,
即左移1位真实值乘2。因为题目中是将8位寄存器移位到16位的temp中,故不考虑移位丢失情况。如果你是编程的话,直接将temp输出就是他此刻的真实值。至于计算,就是H*256+L
即左移1位真实值乘2。因为题目中是将8位寄存器移位到16位的temp中,故不考虑移位丢失情况。如果你是编程的话,直接将temp输出就是他此刻的真实值。至于计算,就是H*256+L
更多追问追答
追答
抱歉,说错了。。关于H部分没错。但对于L,若L是正数,即原来就是源码表示,但计算时会将它求补。即结果为temp=H*256-L。。
若L为负,之前也由补码表示,考虑符号位1求反后为0。故也就是之前说的结果
追问
谢谢!意思说,对于补码的解码、换算成真实值,在给temp赋值的时候就已经由单片机内部完成,而不需要我再去设计什么算法把补码转化成真实值?最终temp中的数据就是16位有符号数据的真实值?按十进制输出就可以?比如int temp=temp/64之后temp中就是十进制的数?
真的不懂补码在计算机中怎么应用的。
2014-08-19
展开全部
上百度查查
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |