C語言 浮點型資料如何在計算機中儲存

2021-10-06 13:22:10 字數 2004 閱讀 6862

浮點型資料報括float ,double,long double型別。

我們來看一下浮點數儲存的例子:

從上面例子中可以看出,我們輸入的是同乙個數字,為什麼浮點型和整數的解讀結果會差別這麼大?要理解這個結果,首先我們要知道浮點型在計算機內部的表示方法。

根據國際標準ieee(電氣和電子工程協會)754,任意乙個二進位制浮點數v可以表示成下面的形式:

(-1)^s* m *2 ^e

(-1)^s表示符號位,當s=0時,v為正數;當s=1時,v為負數;

m表示有效數字,大於等於1,小於等於2;

2^e表示指數字。

舉例來說,十進位制的5.0,寫成二進位制是101.0,相當於1.01*(2^2),那麼,按照上面的格式,可以得出s=0,m=1.01,e=2;

十進位制的-5,寫成二進位制是-101.0,相當於1.01*(2^2),那麼,s=1,m=1.01,e=2.

iee754規定:對於32位的浮點數,最高的一位是符號位s,接著的8位是指數e,剩下的32位是有效數字m。

ieee754對有效數字m和指數e還有一些特別的規定**:前面說過,1<=m<2,m可以寫成1.******的形式,其中******表示小數部分。但ieee規定,計算機儲存m時,預設這個數字的第一位總是1,因此可以被省去,只保留後面的小數部分,比如儲存1.01時,只保留01,等到讀取的時候再把1加上去,這樣做的目的,是節省1位有效數字。以32位浮點數為例,留給m只有23位,將第一位的1捨去之後,等於可以儲存24位有效數字。

至於指數e,情況比較複雜。

首先,e是乙個無符號整數(unsigned int ),這意味著,如果e為8位,它的取值範圍為0-255,如果e為11位,它的取值範圍為0-2047,但是我們知道,科學計數法中的e可以為負數,因此ieee 754規定,存入記憶體的e的真實值還必須要加上乙個中間數,對於8位的e,加上127;對於11位的e,加上1023.

對於e從記憶體中取出分為3種情況:

(1)e不全為0或不全為1;

這時,浮點數就採用下面的規則表示,即指數e的計算值減去127(或1023),得到真實值,再將有效數字m前加上1.比如:0.5的二進位制形式為0.1,由於規定正數部分必須為1,即將小數點向右移動1位,則為:1.0*2^(-1),其階碼為-1+127=126,表示為01111110,而位數1.0部分去掉整數部分為0,補齊0到23位。

則其二進位制表示為:0 01111110 00000000000000000000000

(2)e全為0;

當e全為0時,浮點數的真實值為0-127(或0-1023),有效數字m不再加上第一位的1,而是還原為0.******的小數,這樣做是為了表示正負0,以及接近0的很小數字。

(3)e全為1;

當e全為1時,如果有效數字全為0,則表示正負無窮大。

解釋前面的例子:

(1)為什麼例子中的9還原成浮點型,就成了0.000000?首先9在計算機中儲存的二進位制表示為:0000 0000 0000 0000 0000 0000 0000 1001,可以看出,符號位為0,代表正數,後面8位e代表指數,後面23位代表有效數字。當e全為0時代表接近0的數,所以例題中輸出位0.000000;

(2)為什麼浮點數9.0用整型輸出變成乙個比較大的隨機數呢?

首先,浮點數9.0的二進位制表示為:1001.0,即1.001*(2^3),即:s=0,e=3+127=130,m=1.001;

即:0 10000001 001 0000 0000 0000 0000 0000

這個32位的二進位制,還原成十進位制,正是1091567616.

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

一 浮點型的儲存 在十進位制中我們都學習過科學計數法,比如31.4可以用科學計數法表示就是3.14 10 1。浮點型同樣是採取科學計數法進行表示的。在計算機中,以二進位制數儲存,如1011.10用科學計數法的方式可以寫成1.01110 2 3,因為浮點型還有負數,所以在計算機中表示時還需要加上乙個符...

浮點數如何在計算機中表示

浮點數如何在計算機中表示 乾坤有數 根據ieee 754標準,浮點數的表示形式如下 其中,s為數的符號位,為0時表示正數,為1時表示負數 p為階碼,通常用移碼表示 m為尾數,用原碼表示。目前,計算機中主要使用三種形式的ieee 754浮點數,如下表所示 在ieee 754標準中,約定小數點左邊隱含有...

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

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