成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

YanceyOfficial / 3171人閱讀

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

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

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

(一)小數(shù)的二進制

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

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

所以1.8125的二進制為1.1101。

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

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

(二)科學計數(shù)法

根據(jù)國際標準IEEE(電氣和電子工程協(xié)會) 754,任意一個二進制浮點數(shù)V可以表示成下面的形式:

  • (-1)^S * M * 2^E
  • (-1)^S表示符號位,當s=0,V為正數(shù);當s=1,V為負數(shù)。
  • M表示有效數(shù)字,大于等于1,小于2。
  • 2^E表示指數(shù)位。
    例如:對于上面的二進制浮點數(shù)101.1101,S為0,M為1.011101,E為6,則科學計數(shù)法表示為:(-1)^0 * 1.011101* 2^6

(三)存儲模型

單精度浮點型

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

符號位S

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

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

指數(shù)E

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

有效數(shù)字M

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

雙精度浮點型

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

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

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

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

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

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

(四)練習題

#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)存中的存儲:

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122424.html

相關(guān)文章

發(fā)表評論

0條評論

YanceyOfficial

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<