完整的浮點數表示包括以下幾點:
符號(S):1位二進制位,0表示正數,1表示負數。階碼部分(E):根據不同的精度E的位數不同(參照下圖float與double的區別),表示小數點向右移動的位數。E>0 表示向右移動,E<0表示向左移動。
尾數部分(M):根據不同的精度M的位數不同參照下圖float與double的區別),是浮點數的二進制表示。需要註意的是這裏尾數部分為?1.M...?,所以遇到類似0.125這樣的小數,其二進制表示為?0.1001111...?,這時就需要將小數點右移1位才符合要求。
浮點數的精度:在像C/C++這樣的語言中,浮點數有float,double類型,他們的精度是不壹致的。
float類型:使用32位表示,1位符號,8位階碼(階碼包含壹位符號位),23位尾數(無符號位)。階碼的範圍: 使用移碼表示,偏置取127,表示數的範圍為[-126,127](由IEEE 754標準規定,見下文)。尾數範圍: 實際應當用24位表示,但由於第壹位必須為1,則采用23位表示(節省了壹位來提高精度),[0,2^23=8388608]
Double類型:使用64位表示,1位符號,11位階碼(階碼包含壹位符號位),52位尾數(無符號位)。階碼的範圍: 與float類型壹樣,使用移碼表示,偏置取127,表示數的範圍為[-1022,1023]。尾數範圍: 實際應當用53位表示,但由於第壹位必須為1,則采用52位表示(節省了壹位來提高精度)
浮點數的二進制表示:10進制浮點數轉換為二進制表示很簡單,分2個部分討論。整數部分:采用除2取余法計算(直到被除數為0);小數部分:采用乘2取整法計算(直到小數部分為0,對於無限小數采取截斷方式)。最後用整數二進制表示.小數二進制表示就可以得到完整的浮點數二進制表示了。