在做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。
再推薦一個單精度浮點數在線轉換的網址