C語(yǔ)言詳細(xì)圖解浮點(diǎn)型數(shù)據(jù)的存儲(chǔ)實(shí)現(xiàn)
在引入知識(shí)之前,先來(lái)看一個(gè)案例,就知道了解浮點(diǎn)型數(shù)據(jù)存儲(chǔ)的重要性與必要性。
舉個(gè)例子:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int num = 9; float *pnum = (float *)#//強(qiáng)制轉(zhuǎn)換類型 printf("n的值為:%d\n",n); printf("*pFloat的值為:%f\n",*pnum); *pnum = 9.0; printf("num的值為:%d\n",n); printf("*pFloat的值為:%f\n",*pnum); return 0; }
一般情況下我們都會(huì)認(rèn)為*pnum打印的就是n的值,只不過(guò)是以浮點(diǎn)型打印出來(lái),所以是9.000000啊,然后下面的n又因?yàn)?pnum的修改,加之因?yàn)?d輸出,所以還是9啊,但是結(jié)果不是,打印出來(lái)的結(jié)果如下圖所示:
結(jié)果與我們想的有很大的偏差。。。。。那就有必要讓我們來(lái)了解浮點(diǎn)型數(shù)據(jù)的存儲(chǔ)啦!
1.首先,根據(jù)上面的實(shí)例,我們可以發(fā)現(xiàn)整型和浮點(diǎn)型數(shù)據(jù)的存儲(chǔ)方法是不一樣的!
2.那么浮點(diǎn)型數(shù)據(jù)是怎么存儲(chǔ)的呢?
(1)根據(jù)國(guó)際標(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時(shí),V為正數(shù);當(dāng)S=1時(shí),V為負(fù)數(shù)。
## M 表示有效數(shù)字,且1<=M<2
## 2^E表示指數(shù)位
舉例來(lái)說(shuō):十進(jìn)制的 5.0,寫成二進(jìn)制是 101.0,相當(dāng)于 1.01 *2^2 。那么,按照上面的V的格式,可以得出S=0,M=1.01,E=2。
十進(jìn)制的 -5.0,寫成二進(jìn)制是 -101.0 ,相當(dāng)于 -1.01 * 2^2 。那么,S=1,M=1.01,E=2。
IEEE 754規(guī)定對(duì)于任意一個(gè)浮點(diǎn)數(shù)V都可以表示成V=(-1)^s * M *2^E,那我們是不是只要知道S、M、E三個(gè)值就可以確定一個(gè)浮點(diǎn)數(shù)?事實(shí)上,c語(yǔ)言內(nèi)存存儲(chǔ)浮點(diǎn)數(shù)時(shí),也確實(shí)是只存儲(chǔ)S、和指數(shù)E有關(guān)的一個(gè)值、和M有關(guān)的一個(gè)值(注意,這里不是直接存E、M) 詳情如下:
相對(duì)應(yīng)的float型是32位的,它的存儲(chǔ)空間如下:
相對(duì)應(yīng)的double型是64位的,它的存儲(chǔ)空間如下:
對(duì)于M與E的特別規(guī)定:
E的使用:
所以我們?cè)賹?duì)剛才的代碼加以解釋:
1.首先我們先把n的補(bǔ)碼寫出來(lái),因?yàn)閚是正數(shù),所以它的原反補(bǔ)相同。
2.按照上面的方法,把n的補(bǔ)碼分解后發(fā)現(xiàn)它的E為全0,所以相當(dāng)于一個(gè)無(wú)窮小的數(shù)字,所以此時(shí)*p為0.000000……
3.將*p改成9.0后按照上面的方法,先改成二進(jìn)制 1001.1,然后寫成 (-1)^0 * 1.001 * 2^3,最后按照格式變成補(bǔ)碼,存到內(nèi)存中去,此時(shí)補(bǔ)碼為01000001000100000000000000000000,而n為整型數(shù)據(jù),所以先取出這個(gè)補(bǔ)碼,又因?yàn)槠錇檎龜?shù),所以直接將補(bǔ)碼轉(zhuǎn)為十進(jìn)制%d輸出:
結(jié)果與我們之前執(zhí)行的結(jié)果一致!
浮點(diǎn)型數(shù)據(jù)存儲(chǔ)是很重要的知識(shí)點(diǎn),它也加強(qiáng)了我們對(duì)數(shù)據(jù)存儲(chǔ)的了解!
到此這篇關(guān)于C語(yǔ)言詳細(xì)圖解浮點(diǎn)型數(shù)據(jù)的存儲(chǔ)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語(yǔ)言數(shù)據(jù)存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言二進(jìn)制思想以及數(shù)據(jù)的存儲(chǔ)
- C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)詳解
- C語(yǔ)言數(shù)據(jù)的存儲(chǔ)和取出詳細(xì)講解
- C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解上篇
- C語(yǔ)言數(shù)據(jù)的存儲(chǔ)詳解
- C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)
- 帶你了解C語(yǔ)言的數(shù)據(jù)的存儲(chǔ)
- 詳解C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)
- C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)詳解
相關(guān)文章
基于C語(yǔ)言實(shí)現(xiàn)關(guān)機(jī)小游戲的示例代碼
關(guān)機(jī)會(huì)寫吧!猜數(shù)字會(huì)寫吧!本文將結(jié)合這兩個(gè)功能,用C語(yǔ)言編寫一個(gè)關(guān)機(jī)惡搞小游戲(最好的朋友轉(zhuǎn)瞬即逝),只要猜對(duì)了,1分鐘后執(zhí)行關(guān)機(jī),除非輸入“我是豬”,但是輸完后,1分鐘后還是會(huì)執(zhí)行關(guān)機(jī),該保存保存,感興趣的可以嘗試一下2022-07-07ubuntu 下編譯C++代碼出現(xiàn)的問(wèn)題解決
這篇文章主要介紹了ubuntu 下編譯C++代碼出現(xiàn)的問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2015-03-03C語(yǔ)言for循環(huán)嵌套for循環(huán)在實(shí)踐題目中應(yīng)用詳解
初學(xué)C語(yǔ)言,常常遇到for循環(huán)中嵌套個(gè)for循環(huán),初學(xué)者對(duì)于這種形式總是一知半解,這次我就整理了常見(jiàn)的for循環(huán)嵌套for循環(huán)的題目,我們一起爭(zhēng)取一舉拿下這類題。學(xué)廢他們,以后再見(jiàn)到就不怕啦!每天都要學(xué)一點(diǎn)呀。加油,奮斗的我們2022-05-05C語(yǔ)言實(shí)現(xiàn)將字符和數(shù)字串到一起
今天小編就為大家分享一篇C語(yǔ)言實(shí)現(xiàn)將字符和數(shù)字串到一起,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12