单精度浮点数转化为10进制数的原理

时间:2024-03-05 12:26:06

在做MODBUS通讯时经常会用到单精度浮点数来表示测量值,比如41 20 00 00代表十进制的10,用代码可以轻松实现转换,但是他是怎么计算出来的呢?查了一些资料后我知道了计算的方法,在此记录一下。

比如10,他的单精度浮点数时41 20 00 00,先将其从16进制转换为10进制,就是65 32 00 00,再把他们对应的8位二进制数写出来01000001 00100000 00000000 00000000一共32位(32位是单精度,64位是双精度),再将其从右往左数划分为三部分:31位,30到23位,22到0位。
1、其中第31位为1位符号位,0表示正数,1表示负数;
2、30到23位为8位指数位,得到1000 0010,十进制为130;
3、22到0位为尾数位,得到010 0000 0000 0000 0000 0000,这里直接在前面加“0.”,得到0.010 0000 0000 0000 0000 0000,也就是二进制小数的0.01,得到十进制0.25;
4、最后是计算的公式:10进制数=(-1)^符号位 * (1+尾数位) * 2^(指数位-127),把1~3的值代入,(-1 ^ 0) * (1+0.25) * 2 ^(130 - 127) = 1 * 1.25 * 2^3 = 10。

再推荐一个单精度浮点数在线转换的网址

http://www.styb.cn/cms/ieee_754.php