任何資料在記憶體中都是以二進位制的形式儲存的。浮點數也不例外。浮點的儲存方式與整數有一點區別就是:浮點的儲存方式是採用:符號位+階碼+尾數的形式。
符號位:在計算機記憶體中,通常都是以一位表示正數(用0表示)或者負數(用1表示)
階碼:在機器中表示乙個浮點數時需要給出指數,這個指數用整數形式表示,這個整數叫做階碼,階碼指明了小數點在資料中的位置。它與科學計數法中的冪是乙個道理。
尾數:指小數點後面的數
例:將133.5f化為二進位制數。首先將整數部分化為二進位制數為
1000 0101
然後將小數部分化為二進位制為0.1。則133.5的二進位制數為
1000 0101.1
而在計算機中是怎麼樣儲存這個數的呢?首先將這個二進位制數用「科學計數法」的形式表示出來就是
1.0000 1011 * 2^7
這裡階碼採用移碼表示,對於float型資料其規定偏置量為127,階碼位數為8位(對於雙精度來說,其規定的偏置量為1023。階碼位數為11位。),也就是說這裡的階碼應該為127+7 = 134。將其化為二進位制數為
1000 0110
由於規定小數點前面都為1,因此在計算機中,將不會儲存小數點前面的1。這裡的尾數就為00001011。其後全部補0,將其補充到23位。這裡是正數,所以符號位為0。
在儲存時,符號位在最前面,其次是階碼,最後放尾數。因此數字在記憶體中儲存為:
0100 0011 0000 0101 1000 0000 0000 0000
其十六進製制表示為:
0x43058000
以下為測試**:
#include intmain()
上機執行可得到輸出結果為: 0x43058000
浮點數在記憶體中的儲存方式
浮點數儲存的位元組格式如下 位址 0 1 2 3 內容 seee eeee emmm mmmm mmmm mmmm mmmm mmmm 這裡s 代表符號位,1是負,0是正 e 偏移127的冪,二進位制階碼 eeeeeeee 127。m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法...
浮點數在記憶體中的儲存方式
浮點數儲存的位元組格式如下 位址 0 1 2 3 內容 seee eeee emmm mmmm mmmm mmmm mmmm mmmm 這裡s 代表符號位,1是負,0是正 e 偏移127的冪,二進位制階碼 eeeeeeee 127。m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法...
浮點數在記憶體中的儲存方式
浮點數儲存的位元組格式如下 位址 0 1 2 3 內容 seee eeee emmm mmmm mmmm mmmm mmmm mmmm 這裡s 代表符號位,1是負,0是正 e 偏移127的冪,二進位制階碼 eeeeeeee 127。m 24位的尾數儲存在23位中,只儲存23位,最高位固定為1。此方法...