浮點數的計算機儲存格式和二進位制數之間的轉換過程

2021-06-08 16:31:33 字數 1207 閱讀 3425

1, ieee的浮點數格式

短(單精度float)實數: 32位   1位符號  8位指數  23位尾數 

長(雙精度double)實數:64位   1位符號  11位指數 52位尾數 

2, float和double都的尾數含有乙個隱含為1,擴充套件性雙精度則沒有這個限制

3, 小數轉換成二進位制時,指數需要加上127

以單精度為例,闡述將10.25與二進位制互相轉換過程:

a, 將10.25轉換成二進位制數,

a, 轉換整數部分 10 = 1*(2^3)+0*(2^2)+1*(2^1)+0*(2^0)

b, 轉換小數部分,使用"乘2取整"的辦法 (0.25*2=0.5) 0 (0.5*2=1) 1  0.25=01

c, 把數字寫成規格化的二進位制數形式, 10.25=1010.01=1.01001*(2^3) 3就是指數 1.01001捨棄最高位的1變成就是尾數01001(為什麼要捨棄,因為1是隱含位,即所有的小數轉換後整數部分都是1)

d, 將指數加上127轉換成二進位制就得到了8位的指數字 3+127 = 130 轉換成二進位制 1000 0010

e, 根據浮點數的格式可以寫出10.25的二進位制數表示了:

10.25的二進位制數是: 0 1000 0010 01001 0000 0000 0000 0000 000

b,將二進位制數還原成浮點數:0 1000 0010 01001 0000 0000 0000 0000 000

a, 去掉最高位的符號位變成 1000 0010 01001 0000 0000 0000 0000 000

b, 取用來表示指數的8位 1000 0010  因為在浮點數轉換成二進位制是指數是加過127的,所以這時要減去127,130-127=3,所以指數是3

c, 取剩下的23位 01001 0000 0000 0000 0000 000, 這23位實際上就是小數部分,在浮點數轉換成二進位制時,我們捨棄了最高位的1,所以要補回來當做整數,就變成了1.01001 0000 0000 0000 0000 000,由於指數是3,所以要乘上我們的指數,

1.01001 0000 0000 0000 0000 000 * (2^3) = 1010.01 0000 0000 0000 0000 000

d, 將1010.01 0000 0000 0000 0000 000小數點左邊的轉換成十進位制整數就是10,進小數點右邊轉換成小數就是0.25=(0*2^(-1)+1*(2^-2))

**

浮點數的二進位制

1.前幾天,我在讀一本c語言教材,有一道例題 include void main void 在我的編譯器下 編譯是會發生錯誤的。錯誤 cannot convert from int to float win7 vc6.0 sp6 執行結果如下 num的值為 9 pfloat的值為 0.000000 ...

計算機32位浮點數二進位制編譯碼

原文參考 有編輯整數怎樣轉2進製,小數怎樣轉2進製就不說了。12.5 1.整數部分12,二進位制為1100 小數部分0.5,二進位制是.1,先把他們連起來,從第乙個1數起取24位 後面補0 1100.10000000000000000000 這部分是有效數字。把小數點前後兩部分連起來再取掉頭前的1,...

計算機內部的二進位制浮點數加減運算

十進位制科學計數法的加法例子 1.123 10 5 2.560 10 2 1.123 10 5 0.002560 10 5 1.12556 10 5 1.126 10 5 進行尾數加減運算前,必須 對階 最後還要考慮捨入。計算機內部的二進位制運算也是一樣。對階 操作 目的是使兩數的階碼相同。小階向大...