200smart通过通讯读取了1个2字节温度值,第一个字节最高位是符号位,第6位、第5位、第4位、第3位没有定义,第2位定义为2^6(2的六次方),第1位定义为2^5,第0位定义为2^4。第二个字节最高位是2^3,第6位是2^2、第5位是2^1、第4位是2、第3位是2的负一次方 2^(-1),第2位是2^(-2),第1位是2^(-3),第0位是2^(-4)。
如果第一个字节最高位是符号位的话,需要先求补再换算。比如说VW0里读上来的数是866FH,需要先求补,然后再换算。换算就是除以16,但这个求补是如何求?
图片说明:
最佳答案
补码=反码+1 =2^(整数)-原码数+1
高位字节3-6位没有用,不算第7位符号位,高位字节0-2位加上低位字节,可以看做是一个11位整数。866FH, 前面的8是符号,后面的66F是数值,补码=800H(2^11)-66FH+1=192H=402,再除以16,为25.125,终值=-25.125
提问者对于答案的评价:
谢谢
最佳答案作者回复:
对不起,我上面的回答有些错误,"补码=反码+1 =2^(整数)-原码数+1 ",
应该修改为: 补码=反码+1 =2^(整数位数)-1-原码数
所以,66Fh 的补码=800H(2^11)-1-66FH=190H=400
望包涵!
如有错漏请指正!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348054.html