溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

發(fā)布時(shí)間:2021-07-02 16:26:53 來(lái)源:億速云 閱讀:288 作者:Leah 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家介紹C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

C語(yǔ)言中,有兩種類型的浮點(diǎn)數(shù):32位的float和64位的double,而在計(jì)算機(jī)中存儲(chǔ)的是用二進(jìn)制的科學(xué)計(jì)數(shù)法(即基數(shù)為2)表示的值

例如100=1100100B=1.1001B*26,123.456=1111011.0111010010111100011010100111111011111001110111B=1.1110110111010010111100011010100111111011111001110111B*26

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

既然基數(shù)固定為2,尾數(shù)的整數(shù)部分固定為1,那存儲(chǔ)時(shí)就可以省略掉它倆了,只需要存儲(chǔ)另外三個(gè)信息:  正負(fù)符號(hào)+指數(shù)+尾數(shù)的小數(shù)部分

float:符號(hào)占1位,指數(shù)占8位,尾數(shù)小數(shù)占23位;

double:符號(hào)占1位,指數(shù)占11位,尾數(shù)小數(shù)占52位

不過(guò)指數(shù)也有正負(fù),因此存儲(chǔ)時(shí)加個(gè)偏移來(lái)表示。  float用8位表示指數(shù),偏移就是127;  double用的是11位,那偏移就是1023
看看123.456用float是如何存儲(chǔ)的:  因?yàn)槭钦龜?shù),符號(hào)位用0;指數(shù)是6,加上偏移127后,133=10000101B;尾數(shù)的小數(shù)部分的前23位是  1110110111010010111100  1  (第24位是1,因此需要進(jìn)位),拼接成32位數(shù)就是0  10000101  11101101110100101111001  B=1123477881

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

再看一個(gè)純小數(shù)的存儲(chǔ),例如0.00123456,這次倒著推導(dǎo)一下

計(jì)算機(jī)中存儲(chǔ)的是983683318,轉(zhuǎn)換為二進(jìn)制就是0  01110101  01000011101000011110110  B。其中第一個(gè)0表示正值;挨著的8位01110101B=117,表示指數(shù)為(117-127)=-10;最后的23位表示尾數(shù)的小數(shù)部分,前面加上整數(shù)部分的1,再左移23位之后就是1  01000011101000011110110  B=10604790。那么原值就是10604790右移23位,再左移-10位,即10604790右移33位。而233=8589934592。所以原值就是10604790/8589934592=  0.0012345600  407571,可見(jiàn)前10位小數(shù)都是正確的,精度還可以

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

最后試個(gè)double的123.456

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

二進(jìn)制就是:0  10000000101  11101101110100101111,00011010100111111011111001110111  B。其中第一個(gè)0表示正值;指數(shù)位是10000000101B=1029,表示指數(shù)為(1029-1023)=6;最后是52位尾數(shù),前面加上整數(shù)部分的1,再左移52位之后,1  1110110111010010111100011010100111111011111001110111  B=8687443681197687。因此,原值就是8687443681197687右移52位,再左移6位,即右移46位,而246=70368744177664。

8687443681197687/70368744177664=123.456

C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)

關(guān)于C語(yǔ)言中怎么存儲(chǔ)浮點(diǎn)數(shù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI