日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C语言中浮点型在计算机中的存储

發布時間:2023/11/27 生活经验 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中浮点型在计算机中的存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 . 浮點型的存儲

? ? ? ?在十進制中我們都學習過科學計數法,比如31.4可以用科學計數法表示就是3.14*10^1。浮點型同樣是采取科學計數法進行表示的。在計算機中,以二進制數存儲,如1011.10用科學計數法的方式可以寫成1.01110*2^3,因為浮點型還有負數,所以在計算機中表示時還需要加上一個符號位,這樣我們就可以總結出一般的浮點型數據的表示形式:(-1)^S*M*2^E。

? ? ??其中,(-1)^S是符號位。?M是尾數位,即上例中的1.01110,E是指數位,這樣我們把一個浮點型的存儲單元分成三部分。又浮點型在計算機中是4個字節,一個32個bit位,設計者把這32個bit位分為1,8,23,的形式,其中1位最高位是符號位,8位是指數位,23位是尾數位。

? ? ? (1)符號位

? ? ? ? ?最高一位符號位,?實際上就是用0正1負表示。

? ? ? ?(2)尾數位

? ? ? ? ?又我們知道任何一個二進制小數都可以寫成是1.xxx*2^E,所以M的值一個是大于1且小于2的,這樣我們就默認的省去了最前面的1,這樣M省出一個位,可以表示的范圍更大。所以M中存儲的實際是0.xxx中的xxx的部分,如上例中的1.01110*2^3,M的中存儲的實際是01110。此處還應該注意的是,在M中存儲01110的時候是靠前存儲的,即23個位表示為0111 0000 0000 0000 0000 000。為什么要這樣表示呢,這是因為如果01110靠后存儲的時候沒辦法確定有1的前面應該讀取幾個0。再舉一例,如1.000000010111*2^3的時候,M的值應該是0000 0001 0111,在23中如果靠前存儲是0000 0001 0111 0000 0000 000,這樣我們很容易讀取0000 0001 0111,并且如果后面多取0時,所表示的值的大小并不改變。而如果是靠后存儲時,則是0000 0000 0000 0000 0010 111,這樣我們就無法知道1的前面應該取幾個0。

? ? ?(3)指數位

? ? ? ? E是指數位,E的計算機中是無符號整數,它的取值范圍是0---255,但是這和我們的現實生活中又不一樣了,我們知道在實際生活中,E可以是正數也可以是負數,那么計算機如何表示這個負數呢。設計者在設計的時候,讓指數的實際值加上127之后再轉化成二進制數進行存儲,有同學不就會疑惑,這樣它的不就增大了,那它就與實際值不符啊。這里在讀取的時候又做了另一步操作,就是把E(二進制數)轉化成十進制后,再減去127這樣就還原成原來的樣子了。這樣處理之后,E的實際表示的范圍就是-127---128。補充說明,如果E為全0,則實際表示的是-127,這樣這個數很很小,幾乎接近于0,計算機就默認把它當成了0,進行表示。

二 . 浮點型的讀取

? ? 用%f去讀取一個數據時,首先將其劃分成1,8,23的形式,先讀取符號位,0正1負。接著讀取指數位E,將得到的8bit的二進制數,轉化成十進制后再減去127。最后讀取尾數位,從前讀取的值當成是小數點后面的數字,默認小數點前面有一個1,這樣就把浮點型數據讀取出來了。如1 1011 1000 0110 ?0000 0000 0000 0000 000,從前面取以為1,則表示負;接著取后八位1011 1000指數位,將其轉化成十進制數是184再將其減去127得57;再讀取后面的23個位,得011,那么它的M就是011,在前面加上默認的1,那么這個尾數就是1.011,。所以這個浮點數就是-1.011*2^57。

總結

以上是生活随笔為你收集整理的C语言中浮点型在计算机中的存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。