c語言整數轉浮點數 浮點數的秘密

2021-10-13 18:11:10 字數 2069 閱讀 7585

我們在學習 c 語言時,通常認為浮點數和小數是等價的,並沒有嚴格區分它們的概念,這也並沒有影響到我們的學習,原因就是浮點數和小數是繫結在一起的,只有小數才使用浮點格式來儲存。

其實,整數和小數可以都使用定點格式來儲存,也可以都使用浮點格式來儲存,但實際情況卻是,c 語言使用定點格式儲存整數,使用浮點格式儲存小數,這是在 「數值範圍」 和 「數值精度」 兩項重要指標之間追求平衡的結果。

浮點型簡單講就是實數的意思。浮點數在計算機中用以近似表示任意某個實數。具體的說,這個實數由乙個整數或定點數(即尾數)乘以某個基數(計算機中通常是 2)的整數次冪得到,這種表示方法類似於基數為 10 的科學記數法。

首先明確一點,無論是整型、浮點型還是字元等等資料型別在計算機底層都是以二進位制的方式儲存的。

浮點數在記憶體中的儲存和整數不同,因為整數都可以轉換為一一對應的二進位制資料。而浮點數的儲存是由符號位 (sign) + 指數字 (exponent) + 小數字 (fraction) 組成。

型別符號位指數尾數float 1位(第31位) 8位(第23~30位) 23位(第0~22位) double 1位(第63位) 11位(第52~62位) 52位(第0~51位)

int 和 float 同樣佔據四個位元組的記憶體,但是 float 所能表示的最大值比 int 大得多,其根本原因是浮點數在記憶體中是以指數的方式儲存。

浮點數轉換到記憶體中儲存的步驟分為如下三步:

對於第3點:計算指數時需要加上偏移量(後面有介紹為什麼使用偏移量),而偏移量的值與浮點數的型別有關( float 偏移量值為 127 ,double 偏移量值為 1023)。比方對於指數 6,float 與 double 型別偏移後的值分別為:

浮點數19.625用float是如何儲存的:

float和double的範圍是由指數的位數來決定的。(因為表示的時候都是1.x * 2^y的形式,所以忽略了1.x的效果,直接取指數表示浮點數的範圍)

1bit(符號位) 8bits(指數字) 23bits(尾數字)

1bit(符號位) 11bits(指數字) 52bits(尾數字)

於是,float的指數範圍為-127~+128,而double的指數範圍為-1023~+1024,並且指數字是按補碼的形式來劃分的。

其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。

float的範圍為-2^128 ~ +2^128,也即-3.40e+38 ~ +3.40e+38;

double的範圍為-2^1024 ~ +2^1024,也即-1.79e+308 ~ +1.79e+308。

float和double的精度是由尾數的位數來決定的,尾數越多能表示的小數點後面有效數字就越多,因此精度就越高。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是乙個隱含著的「1」,由於它是不變的,故不能對精度造成影響。

float:2^23 = 8388608,一共七位,這意味著最多能有 7 位有效數字,但絕對能保證的為 6 位,也即float的精度為 6~7 位有效數字;

double:2^52 = 4503599627370496,一共 16 位,同理,double的精度為 15~16 位。

8 位 2 進製數表示的有符號數範圍有兩個區間:0000 0000~0111 1111和1000 0000~1111 1111,分別為0~+127和-127~0。

大家看到這裡的問題了吧,有兩個 0 ,乙個正 0 和乙個負 0。

127 轉化為二進位制是:0111 1111

那麼 當我們要表示128,則有128+127即1000 0000 + 0111 1111 = 1111 1111

由上面的例子,我們可以得出規律,採用移位儲存技術,我們可以使用 8 位二進位制來表示從-127~+128共計 127 個負數+零(0)+ 128 個正數總共 256 個數,看來使用移位儲存既沒有 +0 和 -0 的問題,又能充分使用新生成的8位二進位制數最大限度的表示單精度浮點數的冪指數,是非常合理的。

3 浮點數的秘密

浮點數在記憶體的儲存方式為 s m 2 n主要由三部分構成 符號位 指數 n 尾數 m 型別符號位 指數尾數 float 1位 第31位 8位 第23 30位 23位 第0 22位 double 1位 第63位 11位 第52 62位 52位 第0 51位 float和double型別的資料在計算機...

整數和浮點數

python支援對整數和浮點數直接進行四則混合運算,運算規則和數學上的四則運算規則完全一致。基本的運算 1 2 3 6 4 5 6 14 7.5 8 2.1 3.0375使用括號可以提公升優先順序,這和數 算完全一致,注意只能使用小括號,但是括號可以巢狀很多層 1 2 3 9 2.2 3.3 1.5...

整數與浮點數

整數和浮點數可以一起運算 四則運算 加法 num1 10 num2 0.5 reault num1 num2 print result 10.5 減法result num1 num2 print result 9.5 乘法result num1 mun2 print result 5 除法resul...