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代表為負(fù)
2.指數(shù)位(Exponent):用于存儲科學(xué)計數(shù)法中的指數(shù)數(shù)據(jù),并且采用移位存儲
3.尾數(shù)部分(Mantissa):尾數(shù)部分
首先來看float類型(以2.25為例)
步驟一:符號位(占1個bit位)的數(shù)值
很容易看出此數(shù)為正數(shù),因此符號位為0。
步驟二:指數(shù)位(占8個bit位)的數(shù)值
第一步:先將十進制的2.25轉(zhuǎn)換成二進制0100.01;
第二步:將100.01用二進制的科學(xué)計數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+127=129,將129轉(zhuǎn)化成二進制形式(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轉(zhuǎn)換成二進制0100.01;
第二步:將100.01用二進制的科學(xué)計數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+1023=1025,將129轉(zhuǎn)化成二進制形式(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)存
+關(guān)注
關(guān)注
8文章
3102瀏覽量
74907 -
浮點數(shù)
+關(guān)注
關(guān)注
0文章
61瀏覽量
16055
原文標(biāo)題:浮點數(shù)在內(nèi)存中的存儲方式
文章出處:【微信號:cunchujie,微信公眾號:存儲界】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
小數(shù)在內(nèi)存中是如何存儲的?為什么C語言中的浮點數(shù)不支持位移操作?

浮點數(shù)的表示方法

浮點數(shù)常用的編碼方法

單片機浮點數(shù)運算的源碼設(shè)計

浮點數(shù)在內(nèi)存中的存儲

談一談浮點數(shù)的精度問題

什么是浮點數(shù)
PLC中浮點數(shù)的二進制表示

西門子PLC浮點數(shù)程序案例分享

評論