单精度浮点数转化为10进制数的原理
在做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。
再推荐一个单精度浮点数在线转换的网址
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步