float在記憶體中的儲存

2021-10-09 13:27:53 字數 2036 閱讀 3893

以下內容來自於

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.2   取整數部分  1

0.2*2=0.4   取整數部分  0

0.4*2=0.8   取整數部分  0

0.8*2=1.6   取整數部分  1

0.6*2=1.2   取整數部分  0

.........      0.9二進位制表示為(從上往下): 1100100100100......

從這裡可以看出來,小數字數如果不是5,永遠也取不完

2 float型在記憶體中的儲存

float記憶體儲存結構  

31                  30                   29-----23      22----0

實數符號位    指數符號位     指數字         有效數字

將乙個float型轉化為記憶體儲存格式的步驟為:

(1)先將這個實數的絕對值化為二進位制格式,注意實數的整數部分和小數部分的二進位制方法在上面已經**過了。

(2)將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第乙個有效數字的右邊。

(3)從小數點右邊第一位開始數出二十三位數字放入第22到第0位。

(4)如果實數是正的,則在第31位放入「0」,否則放入「1」。

(5)如果n 是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第30位放入「0」。

(6)如果n是左移得到的,則將n減去1後化為二進位制,並在左邊加「0」補足七位,放入第29到第23位。如果n是右移得到的或n=0,則將n化為二進位制後在左邊加「0」補足七位,再各位求反,再放入第29到第23位。

舉例說明: 11.9的記憶體儲存格式

(1) 將11.9化為二進位制後大約是" 1011.1110011001100110011001100..."。

(2) 將小數點左移三位到第乙個有效位右側: "1.011 11100110011001100110 "。 保證有效位數24位,右側多餘的擷取(誤差在這裡產生了)。

(3) 這已經有了二十四位有效數字,將最左邊一位「1」去掉,得到「 011 11100110011001100110 」共23bit。將它放入float儲存結構的第22到第0位。

(4) 因為11.9是正數,因此在第31位實數符號位放入「0」。

(5) 由於我們把小數點左移,因此在第30位指數符號位放入「1」。

(6)因為我們是把小數點左移3位,因此將3減去1得2,化為二進位制,並補足7位得到0000010,放入第29到第23位。

最後表示11.9為:  0 1 0000010 011 11100110011001100110

再舉乙個例子:0.2356的記憶體儲存格式

(1)將0.2356化為二進位制後大約是0.00111100010100000100100000。

(2)將小數點右移三位得到1.11100010100000100100000。

(3)從小數點右邊數出二十三位有效數字,即11100010100000100100000放入第22到第0位。

(4)由於0.2356是正的,所以在第31位放入「0」。

(5)由於我們把小數點右移了,所以在第30位放入「0」。

(6)因為小數點被右移了3位,所以將3化為二進位制,在左邊補「0」補足七位,得到0000011,各位取反,得到1111100,放入第29到第23位。

最後表示0.2356為:0 0 1111100 11100010100000100100000

float資料在記憶體中的儲存

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

float型別在記憶體中的儲存

首先還是看一道題目 include stdafx.h include include using namespace std int tmain int argc,tchar argv 125.5在記憶體中的表示為 125.5轉化為二進位制 1111101.1,變為整數字為1,位1.1111011 ...

float 在記憶體中的儲存方式

float 在記憶體中的儲存方式 c語言中,對於浮點型別的資料採用單精度型別 float 和雙精度型別 double 來儲存,float資料占用32bit,double資料占用 64bit,我們在宣告乙個變數float f 2.25f的時候,是如何分配記憶體的呢?如果胡亂分配,那世界豈不是亂套了麼,...