亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中怎么存儲浮點數

發布時間:2021-07-02 16:26:53 來源:億速云 閱讀:296 作者:Leah 欄目:互聯網科技

這篇文章給大家介紹C語言中怎么存儲浮點數,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

C語言中,有兩種類型的浮點數:32位的float和64位的double,而在計算機中存儲的是用二進制的科學計數法(即基數為2)表示的值

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

C語言中怎么存儲浮點數

既然基數固定為2,尾數的整數部分固定為1,那存儲時就可以省略掉它倆了,只需要存儲另外三個信息:  正負符號+指數+尾數的小數部分

float:符號占1位,指數占8位,尾數小數占23位;

double:符號占1位,指數占11位,尾數小數占52位

不過指數也有正負,因此存儲時加個偏移來表示。  float用8位表示指數,偏移就是127;  double用的是11位,那偏移就是1023
看看123.456用float是如何存儲的:  因為是正數,符號位用0;指數是6,加上偏移127后,133=10000101B;尾數的小數部分的前23位是  1110110111010010111100  1  (第24位是1,因此需要進位),拼接成32位數就是0  10000101  11101101110100101111001  B=1123477881

C語言中怎么存儲浮點數

再看一個純小數的存儲,例如0.00123456,這次倒著推導一下

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

C語言中怎么存儲浮點數

最后試個double的123.456

C語言中怎么存儲浮點數

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

8687443681197687/70368744177664=123.456

C語言中怎么存儲浮點數

關于C語言中怎么存儲浮點數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆云县| 达日县| 天柱县| 东乡| 彭山县| 响水县| 苏尼特左旗| 青岛市| 嘉义县| 桐乡市| 澄迈县| 林西县| 北碚区| 简阳市| 土默特左旗| 临泽县| 山西省| 吉安市| 射洪县| 冕宁县| 永昌县| 革吉县| 新源县| 思南县| 凤山县| 衡阳县| 岳阳县| 寻乌县| 乌拉特后旗| 静安区| 白山市| 黔东| 香格里拉县| 冕宁县| 黄石市| 灌云县| 新晃| 东兰县| 闽清县| 车致| 扶沟县|