float 4個字節(jié)(采用IEEE754標準:標準規(guī)定了計算機程序設計環(huán)境中的二進制和十進制的浮點數(shù)自述的交換、算術(shù)格式以及方法)
浮點數(shù)在內(nèi)存中是按科學計數(shù)法來存儲的,其整數(shù)部分始終是一個隱含著的"1"
例如:123.45=1.2345*10^2;
一個float類型的數(shù)據(jù)在內(nèi)存中的存儲格式為
符號位 指數(shù)位 底數(shù)位
0 00000000 0000000 00000000 00000000
S EEEEEEEE MMMMMMM MMMMMMMM MMMMMMMM
1位 8位 23位
S: 1位,表示負數(shù),0表示正數(shù)
E: 8位,表示指數(shù),可表示數(shù)據(jù)范圍(00000000-11111111,對應的十進制為0-255)
因為指數(shù)可以是正數(shù)也可以是負數(shù),IEEE754標準規(guī)定:指數(shù)減去127才是實際的指數(shù)(這是規(guī)定)
float的指數(shù)表示范圍是-127到128;
M: 24位(實際只存儲23位),表示底數(shù)
因為所有的小數(shù)都可以表示為1.xx*10^n;小數(shù)點前面永遠是1,所以小數(shù)點前面一位默認不存儲,只存儲小數(shù)點后面的23位
所以float的數(shù)據(jù)范圍
1*-2^128到1*2^128 也即 -3.04E38~3.04E38(E表示10的幾次方)
精度問題
float的底數(shù)部分由23位二進制組成
所以底數(shù)的最大值為2^23=8388607(最大為7位),所以float類型的有效數(shù)字最大為7位
double 8個字節(jié)(采用IEEE754標準)
浮點數(shù)在內(nèi)存中是按科學計數(shù)法來存儲的,其整數(shù)部分始終是一個隱含著的"1"
例如:123.45=1.2345*10^2;
一個double類型的數(shù)據(jù)在內(nèi)存中的存儲格式為
符號位 指數(shù)位 底數(shù)位
0 00000000000 0000000 00000000 00000000 00000000 00000000 00000000 00000000 0000
S EEEEEEEEEEE MMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMM
1位 11位 52位
S: 1位,表示負數(shù),0表示正數(shù)
E: 11位,表示指數(shù),可表示數(shù)據(jù)范圍(00000000000-11111111111,對應的十進制為0-2047)
因為指數(shù)可以是正數(shù)也可以是負數(shù),IEEE754標準規(guī)定:指數(shù)減去1023才是實際的指數(shù)(這是規(guī)定)
float的指數(shù)表示范圍是-1023到1024;
M: 53位(實際只存儲52位),表示底數(shù)
因為所有的小數(shù)都可以表示為1.xx*10^n;小數(shù)點前面永遠是1,所以小數(shù)點前面一位默認不存儲,只存儲小數(shù)點后面的52位
所以double的數(shù)據(jù)范圍
1*-2^1024到1*2^1024 也即 -1.798E308~1.789E308(E表示10的幾次方法)
精度問題
double的底數(shù)部分由52位二進制組成
所以底數(shù)的最大值為最大值為2^52=4503599627370496(最大為16位),所以double類型的有效數(shù)字最大為16位
float數(shù)據(jù)十進制和二進制的轉(zhuǎn)換
23.125轉(zhuǎn)換為二進制
整數(shù)和小數(shù)部分分別轉(zhuǎn)換
23的二進制
23/2 11 1
11/2 5 1
5/2 2 1
2/2 1 0
1/2 0 1
23的二進制位10111
0.125的二進制
0.625*2=1.25 取整1,小數(shù)部分0.25
0.25*2=0.5 取整0,小數(shù)部分0.5
0.5*2=1.0 取整1,小數(shù)部分0
0.125的二進制0.101
23.125的二進制10111.101
10111.101將"."向左移動,直到小數(shù)點前面只剩1位;
10111.101=1.0111101*2^4;(類比十進制數(shù)123.456=1.23456*10^2)
指數(shù):實際為4,因為IEEE754標準規(guī)定,存儲的指數(shù)減去127才是實際的指數(shù)(這是規(guī)定)
所以4+127=131轉(zhuǎn)換為二進制才是存儲的指數(shù)10000011
底數(shù):0111101(只記錄小數(shù)點后面即可)
所以23.125在的在內(nèi)存中存儲形式為
符號位 指數(shù)位 底數(shù)位
0 10000011 01111010000000000000000