天天看點

計算機用32位二進制,計算機32位浮點數二進制編解碼

原文參考:http://zhidao.baidu.com/question/42376730.html

有編輯

整數怎樣轉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

把這32位按8位一節整理一下,得:

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

把這32位按8位一節整理一下,得:

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

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