float型資料在記憶體中的儲存形式

2021-06-28 12:42:59 字數 1453 閱讀 4391

乙個float型實數在記憶體中佔4個位元組,即32個二進位制bit,從低位到高位依次叫第0位到第31位。這32位可以分為3個部分:符號位(第

31位),階碼(第

30位到第

23位共

8位),尾數(最低

23位)。 1

、符號位。最高位也就是第31位表示這個實數是正數還是負數,為0表示正數或0,為1表示負數. 2

、階碼。第30位到第23位這8個二進位制位表示該實數轉化為規格化的二進位制實數後的指數與127(127即所謂偏移量)之和即所謂階碼.

規格化的二進位制實數的指數只能在-127----+127之間,所以,乙個float型數的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.

3、尾數。其他最低的

23位即第

22位到第

0位表示該實數轉化為規格化的二進位制實數後小數點以後的其餘各位即所謂尾數.

例如,將十進位制178.125表示成機器內的32個位元組的二進位制形式.

第一步:將128.125表示成二進位制數:(178.125)(十進位制數)=(10110010.001)(二進位制形式);

第二步:將二進位制形式的浮點實數轉化為規格化的形式:(小數點向左移動7個二進位制位可以得到)

10110010.001=1.0110010001*2^7

因而產生了以下三項:

符號位:該數為正數,故第31位為0,佔乙個二進位制位.

階碼:指數為7,故其階碼為127+7=134=(10000110)(二進位制),佔從第30到第23共8個二進位制位.

尾數為小數點後的部分, 即0110010001.因為尾數共23個二進位制位,在後面補13個0,即01100100010000000000000

所以,178.125在記憶體中的實際表示方式為:

0 10000110 01100100010000000000000

再如,將-0.15625表示成機器內的32個位元組的形式.

第一步:將-0.15625表示成二進位制形式: (-0.15625)(十進位制數)=(-0.00101)(二進位制形式);

第二步:將二進位制形式的浮點數轉化為規格化的形式:(小數點向右移動3個二進位制位可以得到)

-0.00101=-1.01*2^(-3)

同樣,產生了三項:

符號位:該數為負數,故第31位為1,佔乙個二進位制位;

階碼:指數為-3,故其階碼為127+(-3)=124=01111100,佔從第30到第23共8個二進位制位;

尾數為小數點後的01,當然後面要補21個0;

所以,-0.15625在記憶體中的實際表示形式為:

1 01111100 01000000000000000000000

可以用以下的程式驗證:

#include

#include

void printffloatbit(float f)

}printf("\n");} 

void main()

float型在記憶體中的儲存形式

單精度float型在記憶體中佔32bits即4個位元組。那麼它在記憶體中的儲存形式是什麼呢?它的組成如上圖 分為符號位 0正,1負 指數字,尾數字。接下來看幾個例子 1 浮點型1.5在記憶體中的二進位制形式是 0011 1111 1100 0000 0000 0000 0000 0000 0 符號位...

float資料在記憶體中的儲存

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...

float在記憶體中的儲存

以下內容來自於 1.十進位制轉二進位制 1.1整數 11 2 5 餘 1 5 2 2 餘 1 2 2 1 餘 0 1 2 0 餘 1 0結束 11二進位制表示為 從下往上 1011 1.2小數 0.9 2 1.8 取整數部分 1 0.8 1.8的小數部分 2 1.6 取整數部分 1 0.6 2 1....