1. 程式人生 > >C語言中浮點數在內存中的存儲方式

C語言中浮點數在內存中的存儲方式

大端 部分 由於 包含 指數 類型 計算機 data- trac

關於多字節數據類型在內存中的存儲問題
////////////////////////////////////////////////////////////////
int ,short 各自是4、2字節。他們在內存中的存儲方式以下舉個樣例說明。


int data = 0xf4f3f2f1;
當中低位存放在編址小的內存單元,高位存放在編址高的內存單元
例如以下:
地址:0x8000 0x8001 0x8002 0x8003
數據: f1 f2 f3 f4 //上面是小端模式,還有大端存儲模式 ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// 依據IEEE在1985年制定的標準來處理浮點數
單精度浮點數用4字節,包含1位符號位s(整數為0,負數為1),8位指數位e。23位有效位f
浮點型使用的是科學計數法,比方十進制的12345能夠表示為1.2345 * 10^4(表示10的4次冪)
用二進制表示為 1.1000000111001 * 2^13
所以計算機中用浮點數表示12345這個十進制應該是這種,s位為0,由於是正數。指數位為13+127=140(127為單精度浮點數偏移值,為了表示僅僅有小數部分的數)。有效位為1000000111001
計算的時候用 (-1)^s * 1.f * 2^(e-127) ,結果就是 1* 1.1000000111001 * 2^(140-127=13) 。和我們剛才表示的一樣
還比方,十進制小數0.125轉換為二進制小數0.001能夠表示為 1* 1.0 * 2^(124-127=-3)
double,雙精度浮點數有1位符號位、11位指數位和52位有效數


知道公式
n=(-1)^s*m*2^e
e=|E|-bias
bias = 2^(k-1)-1(k為E的位數)
m=|1.M|


知道12345在內存中的10進制表示以後
0x4640e400 = 0(100 0110 0)<100 0000 1110 0100 0000>
括號裏的數字為|E| = 140 所以e=140-127=13
尖括號裏的數字為m=|1.M|=|1.100000011100100|=1.506958008
ok,
代入公式n = (-1)^0*1.506958008*2^13=12345

C語言中浮點數在內存中的存儲方式