根據(jù)IEEE 754標準,浮點數(shù)的表示形式如下:
S為數(shù)的符號位
? ? 第一個域:為符號域。其中0 表示數(shù)值為正數(shù)搓谆,而 1 則表示負數(shù)薯嗤。
P為階碼,通常用移碼表示
? ? 第二個域為指數(shù)域鳍侣,對應于我們之前介紹的二進制科學計數(shù)法中的指數(shù)部分丁稀。
? ? 指數(shù)閾:通常使用移碼表示:
? ?(移碼和補碼只有符號位相反,其余都一樣倚聚。對于正數(shù)而言线衫,原碼、反碼和補碼都一樣惑折;對于負數(shù)而言授账,補碼就是其絕對值的原碼全部取反,然后加1(不包括符號位))惨驶。
? ? ?其中單精度數(shù)為 8 位白热,雙精度數(shù)為 11 位。以單精度數(shù)為例粗卜,8 位的指數(shù)為可以表達 0 到 255 之間的 255 個指數(shù)值屋确。
? ? ?但是,指數(shù)可以為正數(shù)续扔,也可以為負數(shù)攻臀。
? ? ?為了處理負指數(shù)的情況,實際的指數(shù)值按要求需要加上一個偏差(Bias)值作為保存在指數(shù)域中的值纱昧,單精度數(shù)的偏差值為 127(0-111 1111)(8位)刨啸,而雙精度數(shù)的偏差值為 1023(0-1 1111 1111)(10位)。
? ? ? 比如识脆,單精度的實際指數(shù)值 0在指數(shù)域中將保存為 127设联;而保存在指數(shù)域中的 64 則表示實際的指數(shù)值 -63善已。偏差的引入使得對于單精度數(shù),實際可以表達的指數(shù)值的范圍就變成 -127 到 128 之間(包含兩端)[-127, 128]离例。
M為尾數(shù)换团,用原碼表示。
? ? ? 圖例中的第三個域為尾數(shù)域粘招,其中單精度數(shù)為 23 位長啥寇,雙精度數(shù)為 52 位長。
? ? ? 除了我們將要講到的某些特殊值外洒扎,IEEE 標準要求浮點數(shù)必須是規(guī)范的辑甜。
? ? ? 這意味著尾數(shù)的小數(shù)點左側必須為 1,因此我們在保存尾數(shù)的時候袍冷,可以省略小數(shù)點前面這個 1磷醋,從而騰出一個二進制位來保存更多的尾數(shù)。這樣我們實際上用 23 位長的尾數(shù)域表達了 24 位的尾數(shù)胡诗。
?? ? ? ?比如對于單精度數(shù)而言邓线,二進制的 1001.101(對應于十進制的 9.625)可以表達為 1.001101 × 23,所以實際保存在尾數(shù)域中的值為 00110100000000000000000煌恢,即去掉小數(shù)點左側的 1骇陈,并用 0 在右側補齊。
目前瑰抵,計算機中主要使用三種形式的IEEE 754浮點數(shù)你雌,如下表所示
舉例
下面舉例說明27.0f在二進制文件中怎么表示。
float共計32位二汛,折合4字節(jié)
由最高到最低位分別是第31婿崭、30、29肴颊、……氓栈、0位
31位是符號位婿着,1表示該數(shù)為負授瘦,0反之提完。
30-23位,一共8位是指數(shù)位婉陷。
22-0位秽澳,一共23位是尾數(shù)位。
每8位分為一組楼吃,分成4組孩锡,分別是A組亥贸、B組炕置、C組、D組默垄。
每一組是一個字節(jié)口锭,在內存中逆序存儲讹弯,即:DCBA
27.0表示成二進制為:11011.0
用科學計數(shù)法表示為1.110110*2^4,現(xiàn)在我們要的尾數(shù)和指數(shù)都出來了组民。
尾數(shù)為:1101 10?(刪除前面的第一個1臭胜,因為用科學計數(shù)法表示癞尚,二進制中第一個永遠都為1浇揩,計算機在存儲的時候就沒有存儲這個1胳徽,只存儲小數(shù)點后面的位數(shù))?? 不足23位,補0适篙,就是1011 0000 0000 0000 0000 000(23位)
指數(shù):為4 嚷节。一共8位硫痰,可以表示范圍是0 ~ 255的無符號整數(shù)翁都,也可以表示-128~127的有符號整數(shù)柄慰。但因為指數(shù)是可以為負的坐搔,所以為了統(tǒng)一把十進制的整數(shù)化為二進制時,都先加上127蠢挡。
所以:4+127=131? 變成二進制就是10000011
27.0用二進制表示就是:
加上第31位的符號位0
就是0100 0001 1101 1000 0000 0000 0000 0000
十六進制就是:41 D8 00 00
再看一個數(shù)27.5业踏,二進制為11011.1
1.10111*2^4
尾數(shù)(小數(shù)點后的數(shù))10111勤家,補夠23位 1011 1000 0000 0000 0000 000
指數(shù):4伐脖,加上127乐设,就是131近尚,二進制1000 0011
用二進制表示就是 (符號數(shù)位1位)0 (指數(shù)位8位)1000 0011 (尾數(shù)位23位)1011 1000 0000 0000 0000 000
寫成二進制標準形式:0100 0001 1101 1100 0000 0000 0000 0000
寫成16進制就是41 DC 00 00