浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式
C語(yǔ)言中浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式
C語(yǔ)言中,對(duì)于浮點(diǎn)類型的數(shù)據(jù)采用單精度類型(float)和雙精度類型(double)來(lái)存儲(chǔ),float數(shù)據(jù)占用32bit,double數(shù)據(jù)占用64bit,我們?cè)诼暶饕粋€(gè)變量float f= 2.25f的時(shí)候,是如何分配內(nèi)存的呢?
float在內(nèi)存中的存儲(chǔ)方式如下圖所示:
double在內(nèi)存中的存儲(chǔ)方式如下圖所示:
無(wú)論是單精度還是雙精度在存儲(chǔ)中都分為三個(gè)部分:
1.符號(hào)位(Sign) : 0代表正,1代表為負(fù)
2.指數(shù)位(Exponent):用于存儲(chǔ)科學(xué)計(jì)數(shù)法中的指數(shù)數(shù)據(jù),并且采用移位存儲(chǔ)
3.尾數(shù)部分(Mantissa):尾數(shù)部分
首先來(lái)看float類型(以2.25為例)
步驟一:符號(hào)位(占1個(gè)bit位)的數(shù)值
很容易看出此數(shù)為正數(shù),因此符號(hào)位為0。
步驟二:指數(shù)位(占8個(gè)bit位)的數(shù)值
***步:先將十進(jìn)制的2.25轉(zhuǎn)換成二進(jìn)制0100.01;
第二步:將100.01用二進(jìn)制的科學(xué)計(jì)數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+127=129,將129轉(zhuǎn)化成二進(jìn)制形式(1000 0001)寫到指數(shù)部位。
步驟三:尾數(shù)部分(占23個(gè)bit位)的數(shù)值
將步驟二第二步中所得的數(shù)1.001,小數(shù)點(diǎn)后的三位數(shù)001寫到指數(shù)部位,剩下的位用0補(bǔ)齊即可。
所以單精度浮點(diǎn)數(shù)2.25在內(nèi)存中的表示方式為:
0 1000 0001 00100000000000000000000
再來(lái)看double類型(還是以2.25為例)
步驟一:符號(hào)位(占1個(gè)bit位)的數(shù)值
很容易看出此數(shù)為正數(shù),因此符號(hào)位為0。
步驟二:指數(shù)位(占11個(gè)bit位)的數(shù)值
***步:先將十進(jìn)制的2.25轉(zhuǎn)換成二進(jìn)制0100.01;
第二步:將100.01用二進(jìn)制的科學(xué)計(jì)數(shù)法表示為1.001;
第三步:將第二步所得數(shù)值寫成指數(shù)形式1.001*(2^2);
第四步:將指數(shù)數(shù)值2+1023=1025,將129轉(zhuǎn)化成二進(jìn)制形式(100 0000 0001)寫到指數(shù)部位。
步驟三:尾數(shù)部分(占52個(gè)bit位)的數(shù)值
將步驟二第二步中所得的數(shù)1.001,小數(shù)點(diǎn)后的三位數(shù)001寫到指數(shù)部位,剩下的位用0補(bǔ)齊即可。
所以雙精度浮點(diǎn)數(shù)2.25在內(nèi)存中的表示方式為:
0 100 0000 0001 0010000000000000000000000000000000000000000000000000