VS2008 MSDN 中有 浮點數格式的詳細介紹,本文只是一個總結性的東西,欲
詳細研究請參考
(1)MSDN中輸入:IEEE,找到浮點數相關部分
(2)可以參考網上一些文章
http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
http://blog.csdn.net/ganxingming/article/details/1449526
http://blog.csdn.net/zht_304/article/details/5461285
在VC中浮點數有以下幾種
符號位 指數位 尾數M 位移量
real*4 1 8 23 127
real*8 1 11 52 1023
real*10 1 15 64 16383
說明:
1. real*後面的數字代表是位元組數,如real*4,4個位元組,就是平常說的float
real*8為8個位元組,平常所說的double,long double與double一樣也是
real*8
2. real*4和real*8中尾數有1個前置1,但它並沒有儲存記憶體中,因此real*4
和real*8的尾數實際上24位和53位。real*10並沒有隱含的前置1,所以存
的就是尾數的實際位元
3. 位移量=2^(指數位-1)-1
下面看一個實際例子:1987.75如何用float儲存
首先將1987.75化成二進位形式:
1987.75D = 111 1100 0011.11B
= 1.1111 0000 1111 * 2^10 B
所以儲存為
0100 0100 1111 1000 0111 1000 0000 0000 B = 44F87800 H
由float儲存格式知,最高位是符號位,1987.75是正數,所以最高位是0,
接下來8位是指數位,指數是10,由於要加上位移量127,所以指數是137,
137化成2進位就是1000 1001,所以接下來的8位就是1000 1001,
中以紅色背景部分,接下來就是尾數了,注意對於float(即real*4)最高位
的1不儲存,所以1.1111 0000 1111隻有小數點後的1111 0000 1111
會儲存,小數點前的1不會儲存,故儲存為中的藍色背景部分,由於
尾數23位,所以後面不夠的全部補成0,下面用程式驗證一下:VC6.0或
VC2008中都可以
long a = 0x44F87800;float* pF = (float*)&a;CString str;str.Format(_T("%f"), *pF);AfxMessageBox(str);
通過程式可知上述結果正確。
VS2008 中的MSDN中有幾個例子,讀者可以自行參考一下。