C語言中,對于浮點類型的數(shù)據(jù)采用單精度類型(float)和雙精度類型(double)來存儲,float數(shù)據(jù)占用32bit,double數(shù)據(jù)占用64bit,我們在聲明一個變量float f= 2.25f的時候,是如何分配內(nèi)存的呢?
float在內(nèi)存中的存儲方式如下圖所示:
double在內(nèi)存中的存儲方式如下圖所示:
無論是單精度還是雙精度在存儲中都分為三個部分:
1.符號位(Sign) : 0代表正,1代表為負
2.指數(shù)位(Exponent):用于存儲科學計數(shù)法中的指數(shù)數(shù)據(jù),并且采用移位存儲
3.尾數(shù)部分(Mantissa):尾數(shù)部分
首先來看float類型(以2.25為例)
步驟一:符號位(占1個bit位)的數(shù)值
很容易看出此數(shù)為正數(shù),因此符號位為0。
步驟二:指數(shù)位(占8個bit位)的數(shù)值
第一步:先將十進制的2.25轉換成二進制0100.01;
第二步:將100.01用二進制的科學計數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+127=129,將129轉化成二進制形式(1000 0001)寫到指數(shù)部位。
步驟三:尾數(shù)部分(占23個bit位)的數(shù)值
將步驟二第二步中所得的數(shù)1.001,小數(shù)點后的三位數(shù)001寫到指數(shù)部位,剩下的位用0補齊即可。
所以單精度浮點數(shù)2.25在內(nèi)存中的表示方式為:
0 1000 0001 00100000000000000000000
再來看double類型(還是以2.25為例)
步驟一:符號位(占1個bit位)的數(shù)值
很容易看出此數(shù)為正數(shù),因此符號位為0。
步驟二:指數(shù)位(占11個bit位)的數(shù)值
第一步:先將十進制的2.25轉換成二進制0100.01;
第二步:將100.01用二進制的科學計數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+1023=1025,將129轉化成二進制形式(100 0000 0001)寫到指數(shù)部位。
步驟三:尾數(shù)部分(占52個bit位)的數(shù)值
將步驟二第二步中所得的數(shù)1.001,小數(shù)點后的三位數(shù)001寫到指數(shù)部位,剩下的位用0補齊即可。
所以雙精度浮點數(shù)2.25在內(nèi)存中的表示方式為:
0 100 0000 0001 0010000000000000000000000000000000000000000000000000
-
內(nèi)存
+關注
關注
8文章
2945瀏覽量
73729 -
浮點數(shù)
+關注
關注
0文章
59瀏覽量
15845
原文標題:浮點數(shù)在內(nèi)存中的存儲方式
文章出處:【微信號:cunchujie,微信公眾號:存儲界】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論