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

2021-06-13 23:08:02 字數 1496 閱讀 9110

原文參考:

有編輯

整數怎樣轉2進製,小數怎樣轉2進製就不說了。

12.5:

1. 整數部分12,二進位制為1100; 小數部分0.5, 二進位制是.1,先把他們連起來,從第乙個1數起取24位(後面補0):

1100.10000000000000000000

這部分是有效數字。(把小數點前後兩部分連起來再取掉頭前的1,就是尾數)

2. 把小數點移到第乙個1的後面,需要左移3位, 加上偏移量127:127+3=130,二進位制是10000010,這是階碼。

3. -12.5是負數,所以符號位是1。把符號位,階碼和尾數連起來。注意,尾數的第一位總是1,所以規定不存這一位的1,只取後23位:

1 10000010 10010000000000000000000

11000001 01001000 00000000 00000000

就是十六進製制的 c1480000.

2.025675

1. 整數部分2,二進位制為10; 小數部分0.025675, 二進位制是.0000011010010010101001,先把他們連起來,從第乙個1數起取24位(後面補0):

10.0000011010010010101001

這部分是有效數字。把小數點前後兩部分連起來再取掉頭前的1,就是尾數: 00000011010010010101001

2. 把小數點移到第乙個1的後面,左移了1位, 加上偏移量127:127+1=128,二進位制是10000000,這是階碼。

3. 2.025675是正數,所以符號位是0。把符號位,階碼和尾數連起來:

0 10000000 00000011010010010101001

01000000 00000001 10100100 10101001

就是十六進製制的 4001a4a9.

-1.99744

還需要詳細說嗎?

如果只有小數部分,那麼需要右移小數點. 比如右移3位才能放到第乙個1的後面, 階碼就是127-3=124.

補充乙個浮點二進位制數手工轉換成十進位制數的例子:

假設浮點二進位制數是 1011 1101 0100 0000 0000 0000 0000 0000

按1,8,23位分成三段:

1 01111010 10000000000000000000000

最後一段是尾數。前面加上"1.", 就是 1.10000000000000000000000

下面確定小數點位置。階碼是01111010,加上00000101才是01111111(127),

所以他減去127的偏移量得-5。(或者化成十進位制得122,122-127=-5)。

因此尾數1.10(後面的0不寫了)是小數點右移5位的結果。要復原它就要左移5位小數點,得0.0000110, 即十進位制的0.046875

最後是符號:1代表負數,所以最後的結果是 -0.046875

還要注意其他機器的浮點數表示方法可能與此不同. 不能任意移植.

浮點數的二進位制

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

浮點數轉化二進位制

乙個int型別表示的整數值是 2 31 2 31 1 32位二進位制表示 1111111111111111 11111111 11111111 011111111 11111111 11111111 1111111 類似整數聯想到浮點數是怎麼表示的呢?最初正常人可能為這樣想的 但是這樣好像表示的數也...

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

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