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