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

2021-07-26 14:44:07 字數 2427 閱讀 6926

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表示指數字

舉例來說:

十進位制的5.0,寫成二進位制是

101.0

,相當於

1.01*2^2

。按上面科學計數法的格式,可以得出

s = 0

,m = 1.01

, e = 2

。如果是

-5.0

,s= 1

,m = 1.01. e = 2。

對於單精度浮點數來講,佔32位,每個

bit位存入相應的二進位制數,具體看下面:

下面對s,m,

e如何存入記憶體做以解釋:

s(符號位

):(-1)^s表示符號位,當

s = 0,v

為正;當

s = 1,v

為負;

m(尾數)

1<=m<2;

m要寫成

1.******

的形式,

******

表示小數部分,在把

m存入計算機時,

m的第一位總是

1,因此,可以把第一位

1在每次存入的時候去掉,只存入小數部分,在讀取的時候再在前面加上

1,這樣就可以用

23位全部來存小數部分,等於可以保留

24位有效數字。

e(階碼

):e為乙個無符號整形,e為

8位時,它的取值範圍為

0~255

;若為double型,e

為11,它的取值範圍是

0~2047

。但是,在科學計數法中,

e是可以表示負數的,所以規定,存入記憶體時

e的真實值必須在加上乙個中間值,對於8位的

e,這個中間值位

127;對於

11位的

e,這個中間值位

1023

。在讀取的時候在減去

127。例如,

2^10的e

是10儲存成單精度浮點型,存入記憶體時,必須儲存成

10+127=137

,即10001001

,在讀取時在減去

127。所以e

的真實值的範圍就變成了

127~128.

下面在解釋e的

3中特殊情況:

(1)e不全位

0或不全為

1讀取時指數e的計算值減去

127,得到真實值,再將有效數字

m前加上

1.比如:

0.5的二進位制形式為

0.1,由於規定

m必須大於1小於

2,則0.1的小數點右移

1位,則為

1.0*2^(-1)

,m1.0

去掉正數部分的

1其餘有效位都為0;

e存入時為

-1+127 = 126

,表示為二進位制為

01111110

,,則其二進位制為

0 01111110 00000000000000000000000

(2)e為全

0這時e為最小,浮點數的指數e等於

0-127+1

即為真實值,有效數字

m不再加上第一位的1,

即讀取為0.******的小數。這個數表示正負

0,是乙個接近

0的很小的值。

(3)e位全

1這時,如果有效數字m全位

0,表示正負無窮大(正負取決於符號s)。

對於佔64位的

double,s

佔1位,e

佔11位,m

佔52位

浮點數在計算機中的儲存

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 前兩步結合的結果為...

浮點數在計算機中如何儲存

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...

計算機中的浮點數

寫這篇blog,是因為在上工程碩士數學時候,又開始講到了浮點數的儲存,運算和精度的問題。這個問題已經見了好多次了,從微機原理的課到計算機視覺處理矩陣時候的conditioning,到這次。但感覺一直都沒有理清楚。所以這次嘗試梳理一下。一般主要分為兩種形式,這裡以8位的儲存進行解釋 所以用浮點數表示數...