IEEE754資料格式介紹和解析方式(超權威)
一、定義:什麼是IEEE754
浮點數在C/C++中對應float和double型別,我們有必要知道浮點數在計算機中實際儲存的內容。
IEEE754標準中規定float單精度浮點數在機器中表示用 1 位表示數字的符號,用 8 位來表示指數,用23 位來表示尾數,即小數部分。對於double雙精度浮點數,用 1 位表示符號,用 11 位表示指數,52 位表示尾數,其中指數域稱為階碼。
IEEE754規定:
- 單精度浮點數字長32位,尾數長度23,指數長度8,指數偏移量127;雙精度浮點數字長64位,尾數長度52,指數長度11,指數偏移量1023;
- 約定小數點左邊隱含有一位,通常這位數是1,所以上述單精度尾數長度實際為24(預設省略小數點左邊的1則為23),雙精度尾數長度實際為53(預設省略小數點左邊的1則問53);
- 176.0625表示為單精度浮點數:
1).先將176.0625轉換為二進位制數
小數點前:176 / 2 = 88 餘數為 088 / 2=44 餘數為 0
44 / 2 =22 餘數為 0
22 / 2= 11 餘數為 0
11 / 2 =5 餘數為 1
5 / 2=2 餘數為 1
2/ 2 =1 餘數為 0
1/ 2=0 餘數為 1 商為0,結束。
小數點前整數轉換為二進位制:10110000
小數點後:小數部分乘以2,取整數部分,直至乘積小數部分為0
0.0625 * 2 = 0.125 整數為0
0.125 * 2 = 0.25 整數為0
0.25* 2 = 0.50 整數為0
0.5* 2 = 1.0整數為1,小數部分為0,結束
小數點後的小數位轉換為二進位制:0001
故176.0625轉換為二進位制為:10110000.0001
2).IEEE754約定小數點左邊隱含有一位,通常這位數是1,所以10110000.0001=1.01100000001 * 2^7(小數點向左偏移7位);
IEEE754約定單精度指數偏移量為127,所以176.0625使用IEEE754標準表示時,指數偏移量為 7+127=134 ,即:10000110
IEEE754約定單精度尾數長度為23,所以176.0625使用IEEE754標準表示時,尾數為:01100000001000000000000
176.0625>0,即為整數,所以符號位為0
3)由上得出:176.0625使用IEEE754規格化後的表示為:0 10000110 01100000001000000000000
二、解析
typedef union
{
float a;
char b[4];
}Packet;
Packet packet;
void IEEE2Float(void)
{
u8 i=0;
u32 Temp32;
float f_Temp;
Temp32=0x435C0000;
for(i=0;i<4;i++)
{
packet.b[i] =(u8)(Temp32>>(i*8));
}
f_Temp=packet.a;
}
三、連結