在做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。
js 單精度浮點數轉10進製 浮點數轉換為十進位制數
題目 將32位浮點數 01000010111011010000000000000000 轉換為十進位制格式 根據國際標準ieee 754,任意乙個二進位制浮點數v可以表示成下面的形式 1 1 s表示符號位,當s 0,v為正數 當s 1,v為負數。2 m表示有效數字,大於等於1,小於2。3 2 e表示...
單精度浮點數(IEEE754)
單精度浮點數佔據4個位元組,4個位元組的分配如下 a 第一位為符號位,0表示正,1表示負 b 第2 9位為階碼,採用移碼表示 c 第10 32位為尾數,採用原碼表示。1 給定32位串,如何轉換成十進位制數 假設記憶體中存在32位串 cd cc 08 41。因為intel cpu採用little en...
hive浮點數轉化為整數
1 round 四捨五入 round double d 返回double型的d的bigint型別的近似值 round double d,int 返回double型的d的保留n位小數的double型別的近似值 如 select round cust rate from tmp.test select ...