單精度浮點數轉化為10進位制數的原理

青椒肉絲丶發表於2020-12-17

在做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

相關文章