【无标题】

C#例程,从寄存器解析出浮点数,链接:https://pan.baidu.com/s/1dXMF5VrG5q5vfnvdsZrTJw?pwd=eey5 
提取码:eey5 

000280-Rx:01 03 00 00 00 06 C5 C8
id号-01/功能码-03/起始地址-00 00/数据长度-00 06(触摸屏里用到的全部4x寄存器数量,模拟从站的4x寄存器数量要大于等于前者)

000281-Tx:01 03 0C 01 00 00 16 00 21 00 2C 99 9A 42 B3 57 B1
id号-01/功能码-03/0C 00 - 表示从寄存器地址/01 00 - 表示地址1数据256(十进制)/00 16--地址2数据22/00 21-地址3数据3300 2C-地址4数据44/ 99 9A 42 B3-浮点数89.8/ 57 B1-校验码/

99 9A 42 B3按字发送,低字在前,高字在后 ,所以数据是42B3999A,(已验证-89.8是C2B3999A)为什么可以代表浮点数89.8?

首先,我们需要将 89.8 转换为二进制形式。

整数部分 89 转换为二进制是:
89 ÷ 2 = 44 ... 余 1
44÷ 2 = 22 ... 余 0
22 ÷ 2 = 11 ... 余 0
11 ÷ 2 = 5 ... 余 1
5 ÷ 2 = 2 ... 余 1
2 ÷ 2 = 1 ... 余 0
1÷ 2 = 0 ... 余 1
(D) = 1011001(B)。(余数排序下到上)

接下来,我们转换小数部分 0.8 到二进制。
0.8 × 2 = 1.6... 整数部分1
0.6 × 2 = 1.2 ... 整数部分 1
0.2 × 2 = 0.4... 整数部分0
0.4 × 2 = 0.8 ... 整数部分0

0.8 × 2 = 1.6... 整数部分1
0.6 × 2 = 1.2 ... 整数部分 1
.....

(D) = 0.110011001100......(B)。(余数排序上到下)

为了符合 IEEE 754 标准,需要将这个数转换为二进制科学计数法的形式。这通常意味着将小数点移动到第一个 1 的右边,并计算移动了多少位。为了符合标准形式,可以写为 89.8(D) = 1011001.110011001100(B) = 1.011001110011001100* 2^6(B)

确定 float32 的各个部分

符号位 S:因为 89.8 是正数,所以 S = 0
指数位 E:原始指数是 6,需要加上偏移量 127(固定值),所以 E = 6+ 127 = 133。133二进制表示为 10000101(B)。
尾数位 M:尾数的小数部分是 110011001100....。但因为我们只有 23 位来存储尾数的小数部分,而 110011001100....无限循环,所以会有精度误差,有在线转换工具把89.8转换成42B39999也是正确的。而不够23位的情况,需要在其后面补  0,以达到 23 位。

因此,float32   89.8的二进制表示为:0    1000 0101     011001  11001100110011010
十六进制表示为:42B3999A
 

 浮点数25.125图示:

参考链接 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值