單精度浮點數佔據4個字節,4個字節的分配如下:
(a)第一位爲符號位,0表示正,1表示負;
(b)第2~9位爲階碼,採用移碼錶示;
(c)第10~32位爲尾數,採用原碼錶示。
(1)給定32位串,如何轉換成十進制數
假設內存中存在32位串:CD CC 08 41。因爲INTEL CPU採用little endian存儲方式,所以其真實的值爲:41 08 CC CD。將其寫成二進制形式:
0 10000010 00010001100110011001101
該浮點數爲正數,階碼爲10000010,尾數部分爲00010001100110011001101。因爲在IEEE754中,單精度浮點數有規格化處理,所以其真正尾數部分爲1.00010001100110011001101,其中‘.’爲小數點。
移碼的10000010表示3(127+3),所以尾數部分的小數點必須向右移動3位才能得到真實的數據。真實數據爲:
1000.10001100110011001101,其十進制值爲:
8+0.5+1/32+1/64+1/256+1/512+1/4096+1/2^13+1/2^16+1/2^17+1/2^20+1/2^21+1/2^23 ~= 8.55
(2)如何將十進制數轉換成二進制的單精度浮點數
給定數123.5,其對應的二進制原碼爲:1111011.1,左移六位得:(1.1110111)*2^6。根據規格化處理,所有尾數部分都轉化爲1.M形式,其中整數部分1可以省略,所以尾數部分爲:1110111。因爲左移六位,其階碼值爲6,階碼的移碼錶示爲(127+6)=133=10000101。有了尾數部分和階碼部分,我們就可以得到123.5的單精度浮點數位串:
0 10000101 11101110000000000000000
其十六進制表示爲:42 F7 00 00,按照little endian存儲方式,其內存值爲:00 00 F7 42
欲詳細瞭解原碼、反碼、補碼的細節,請參閱牛人的文章:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html