C語言中浮點型在計算機中的儲存

2021-07-25 03:46:55 字數 1558 閱讀 3951

一 . 浮點型的儲存

在十進位制中我們都學習過科學計數法,比如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.****2^e,所以m的值乙個是大於1且小於2的,這樣我們就預設的省去了最前面的1,這樣m省出乙個位,可以表示的範圍更大。所以m中儲存的實際是0.***中的***的部分,如上例中的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語言中浮點數在計算機中的儲存

double 的儲存方式是一樣的,下面用 float 做以解釋 任意乙個二進位制浮點數v可以表示成下面形式 v 1 s m 2 e 1 1 s表示符號位,當 s 0,v 為正 當 s 1,v 為負 2 m為有效數字,因為 m是二進位制,大於等於 1,小於2。3 2 e表示指數字 舉例來說 十進位制的...

浮點型在計算機中的儲存表示

之前一直不明白float在計算機中是如何儲存的,今天下決心 float型別資料 4byte 1bit 符號位 23bti 尾數字 8bit 指數字,範圍 127 128 double型別資料 8byte 1bit 符號位 52bti 尾數字 11bit 指數字,範圍 1023 1024 乙個浮點數可...

浮點數在計算機中的儲存

float和double在儲存方式上遵從ieee規範!例如 8.25 整數部分 除2取餘倒排 除法商餘數 8 24 04 220 2 21 01 201 餘數倒排 1000 小數部分 乘2取整順排 乘法 積整數部分 0.25 2 0.50 0.5 2 1.01 整數部分順排 01 前兩步結合的結果為...