浮點數在記憶體中的儲存

2021-10-23 22:18:29 字數 1302 閱讀 3780

整數在計算機記憶體儲存以二進位制儲存很容易理解,那浮點數怎麼儲存的呢?

其實之所以想到要一**竟是因為類似下面這段**:

#include

intmain

(void

)

由於大意,用轉義字元%d來列印浮點數,結果顯示

為什麼是-461808600呢?我也很奇怪,然後就開始研究研究吧。

當然這個也和編譯器有關,有些就會強制型別轉換,列印:5。

方法:將小數部分不斷乘以2,每次取整數部分直到為1.

0.125×2=0.25 取0

0.25×2=0.5 取0

0.5×2=1 取1

即0.125(10)=0.001(2)

二進位制轉十進位制呢?

方法:將二進位制各位乘以2的負次方,相加即可,

0×1/2+0×1/4+1×1/8=0.125

現在我們來看浮點數如何儲存,按照ieee 754標準進行儲存,具體如下:

第一段 佔 1bit,表示符號位。代稱為 s(sign)。

第二段 佔 8bits,表示指數字。代稱為 e(exponent)。

第三段 佔 23bits,表示尾數字。代稱為 m(mantissa)。

s: 符號位 0代表正數 1代表負數

e: 指數字 ,對於任何數來說 都可以滿足

比如:對於 5 來說,因為 4 < 5 < 8,所以 n=2,而 n=e−127 所以e就等於129

m: 尾數字 也就是小數字,尾數***x後面補零

這裡以5.75為例

將十進位制轉換成二進位制,並轉換位科學計數法表示:

5.75=101.11=1.0111×2^2

符號位:0(代表為正數)

指數部分為:2+127 = 129

尾數部分為:0111

所以:指數字:129 = 1000 0001

尾數字:0111 0000 0000 0000 0000 000

完整二進位制表示如下:

0 1000 0001 0111 0000 0000 0000 0000 000

浮點數在記憶體中的儲存

浮點數在記憶體中的儲存方式與整型數字是不同的,對浮點數的儲存實際上是對ieee754中規定的s m e的儲存。浮點數 float double long double 根據國際標準ieee754,任意乙個二進位制浮點數可以被表示成下面的形式 ieee754規定 對於32位的浮點數,最高的1個位元位為...

浮點數在記憶體中的儲存

浮點數在記憶體中的儲存 常見浮點數型別 float,double,long double.那麼浮點數在記憶體中又是如何儲存的呢,它會和整數一樣嗎?那它的小數點又是如何儲存的呢 int main 執行結果為 n和 pfloat在記憶體中明明是同一位置同一數字,為什麼浮點數和整數的讀取結果會不一樣.說明...

浮點數在記憶體中的儲存形式

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