亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

C語言:深度刨析數(shù)據(jù)在內(nèi)存中的存儲(chǔ)——浮點(diǎn)型數(shù)據(jù)

YanceyOfficial / 3272人閱讀

摘要:一浮點(diǎn)型數(shù)據(jù)及其取值范圍二浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)一小數(shù)的二進(jìn)制十進(jìn)制轉(zhuǎn)二進(jìn)制整數(shù)部分與整數(shù)原理相同,按照整數(shù)二進(jìn)制轉(zhuǎn)換的規(guī)則,寫成對(duì)應(yīng)的二進(jìn)制數(shù)。全為表示浮點(diǎn)數(shù)的最大值或者最小值。

一、浮點(diǎn)型數(shù)據(jù)及其取值范圍

二、浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

(一)小數(shù)的二進(jìn)制

十進(jìn)制轉(zhuǎn)二進(jìn)制

整數(shù)部分: 與整數(shù)原理相同,按照整數(shù)二進(jìn)制轉(zhuǎn)換的規(guī)則,寫成對(duì)應(yīng)的二進(jìn)制數(shù)。
小數(shù)部分: 十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)采用乘2取整,順序排列法。具體做法是:用2乘以十進(jìn)制地小數(shù),將積的整數(shù)部分取出,作為十分位,再用2乘以剩下的小數(shù)部分,再將積的整數(shù)部分取出作百分位,重復(fù)進(jìn)行,直到達(dá)到要求的精度。
例如:將十進(jìn)制1.8125轉(zhuǎn)換成二進(jìn)制

所以1.8125的二進(jìn)制為1.1101。

二進(jìn)制轉(zhuǎn)十進(jìn)制

把二進(jìn)制數(shù)寫成加權(quán)系數(shù)展開形式,按十進(jìn)制的加法規(guī)則求和,即按權(quán)相加。
例如:將二進(jìn)制數(shù)1.1101轉(zhuǎn)換為十進(jìn)制

(二)科學(xué)計(jì)數(shù)法

根據(jù)國際標(biāo)準(zhǔn)IEEE(電氣和電子工程協(xié)會(huì)) 754,任意一個(gè)二進(jìn)制浮點(diǎn)數(shù)V可以表示成下面的形式:

  • (-1)^S * M * 2^E
  • (-1)^S表示符號(hào)位,當(dāng)s=0,V為正數(shù);當(dāng)s=1,V為負(fù)數(shù)。
  • M表示有效數(shù)字,大于等于1,小于2。
  • 2^E表示指數(shù)位。
    例如:對(duì)于上面的二進(jìn)制浮點(diǎn)數(shù)101.1101,S為0,M為1.011101,E為6,則科學(xué)計(jì)數(shù)法表示為:(-1)^0 * 1.011101* 2^6

(三)存儲(chǔ)模型

單精度浮點(diǎn)型

IEEE 754規(guī)定: 對(duì)于32位的浮點(diǎn)數(shù),最高的1位是符號(hào)位s,接著的8位是指數(shù)E,剩下的23位為有效數(shù)字M。
如圖表示float型在內(nèi)存中的存儲(chǔ):

符號(hào)位S

S的存儲(chǔ)較為簡單,只有1和0兩種情況:

  • 當(dāng)S等于1時(shí),(-1)^S為負(fù),表示負(fù)數(shù);
  • 當(dāng)S等于0時(shí),(-1)^S為正,表示正數(shù);

指數(shù)E

對(duì)于float型,E共有個(gè)比特8位,可表示范圍 0~255,存入數(shù)據(jù)時(shí),加上中間數(shù)127,這樣做可以便可以表示負(fù)數(shù),所以實(shí)際可保存數(shù)據(jù)范圍為[-127 ,128]。例如:101.1101科學(xué)計(jì)數(shù)法表示為(-1)^0 * 1.011101* 2^6,E為6,內(nèi)存中放6+127=133的二進(jìn)制序列,取出時(shí)同理減123即可。

有效數(shù)字M

在保存M時(shí),默認(rèn)這個(gè)數(shù)的第一位是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的時(shí)候,只保存01,等到讀取的時(shí)候,再把第一位的1加上去。這樣做的目的,是節(jié)省1位有效數(shù)字。以32位浮點(diǎn)數(shù)為例,留給M只有23位,將第一位的1舍去以后,等于可以保存24位有效數(shù)字。

雙精度浮點(diǎn)型

IEEE 754規(guī)定:對(duì)于64位的浮點(diǎn)數(shù),最高的1位是符號(hào)位S,接著的11位是指數(shù)E,剩下的52位為有效數(shù)字M。

雙精度浮點(diǎn)型與單精度浮點(diǎn)型存儲(chǔ)原理基本類似,不再詳細(xì)敘述,區(qū)別是

  • 對(duì)于double型,E共有個(gè)比特11位,可表示范圍0~2047,存入數(shù)據(jù)時(shí)加上中間數(shù)1023,實(shí)際可表示數(shù)據(jù)范圍[-1023,1024]。
  • M共有52個(gè)比特位,能表示位數(shù)更多的有效數(shù)字。

指數(shù)E的特殊情況

E全為0
E全為0時(shí),浮點(diǎn)E的真實(shí)值為0-127(或者0-1023),表示一個(gè)接近于0的很小的浮點(diǎn)數(shù),還原時(shí)有效數(shù)字M不加省略的1。
所以浮點(diǎn)數(shù)不能直接比較大小,要考慮進(jìn)制轉(zhuǎn)換時(shí)存在的誤差,不能用’==’。

E全為1
表示浮點(diǎn)數(shù)的最大值或者最小值。

(四)練習(xí)題

#include#includeint main(){	int n = 9;	float *pFloat = (float *)&n;	printf("n的值為:%d/n", n);	printf("*pFloat的值為:%f/n", *pFloat);	*pFloat = 9.0;	printf("num的值為:%d/n", n);	printf("*pFloat的值為:%f/n", *pFloat);	system("pause");	return 0;}


整型9在內(nèi)存中的存儲(chǔ):

若按float型取出打印,則解讀為:

E為全0,所以printf("*pFloat的值為:%f/n", *pFloat)語句的結(jié)果為0.000000
浮點(diǎn)型9.0在內(nèi)存中的存儲(chǔ):

這個(gè)二進(jìn)制序列按整型打印時(shí)被解讀為整型數(shù)據(jù),將這個(gè)二進(jìn)制序列直接轉(zhuǎn)換為10進(jìn)制即為打印結(jié)果:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/122424.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<