計(jì)算機(jī)運(yùn)算基礎(chǔ)二數(shù)的補(bǔ)碼表示法

字號:

二、 數(shù)的補(bǔ)碼表示法
    數(shù)的正負(fù)號用 0和1表示,使正負(fù)號和數(shù)值全部數(shù)字化了。既然如此,能否將正負(fù)號和數(shù)值放在一起進(jìn)行運(yùn)算,而不因正負(fù)號的不同分別處理呢?為此,提出計(jì)算機(jī)數(shù)的補(bǔ)碼表示法。數(shù)據(jù)的這種表示形式大大地簡化了運(yùn)算的處理過程。
    那么什么是補(bǔ)碼呢?我們先看一個(gè)例子,假定現(xiàn)在時(shí)鐘上的讀數(shù)是 10點(diǎn)鐘,問4小時(shí)之前是幾點(diǎn)鐘?即時(shí)鐘上的讀數(shù)是什么。答案是顯而易見的,為:10 - 4 = 10 +(- 4)= 6(點(diǎn))。但是,這完全可以換一種算法得到同樣的結(jié)果:10 + 8 = 18(點(diǎn))。顯然,18(點(diǎn))在時(shí)鐘刻度盤上的讀數(shù)是6(點(diǎn))。常識告訴我們,時(shí)鐘只能表示到12,超過12時(shí)就把12丟掉,再從0開始,即到達(dá)12時(shí)又復(fù)位為0 。上式中的8是 12 - 4的結(jié)果;也即4是相對于12 的"補(bǔ)數(shù)"。因此,上式可表示為取模運(yùn)算: 10 - 4 = (10 + 8 )Mod (12) = 6 。
    ( 1)數(shù)的原碼表示:原碼是最簡單的計(jì)算機(jī)數(shù)表示法。
    對正數(shù),符號位 = 0 ,數(shù)值位 = 數(shù)的絕對值。+0100101 的原碼為:00100101
    對負(fù)數(shù),符號位 = 1 ,數(shù)值位 = 數(shù)的絕對值。
    - 0100101 的原碼為:10100101
    - 10100101=10000000( 2 7 ) - (- 0100101) = 100000000 + 0100101 = 10100101
    原碼的生成公式為:
    ( 2)數(shù)的反碼表示:
    對正數(shù):同原碼表示 。如, +0100101 表示為00100101。
    對負(fù)數(shù),先將其表示為絕對值(正數(shù))的原碼,然后將每一位的數(shù)變反,即 0變?yōu)?,1變?yōu)? 。如,- 0100101 的反碼是:先表示為00100101 ,取反后為11011010。這個(gè)結(jié)果恰相當(dāng)于計(jì)算11111111 ( 2 8 - 1 ) + (- 00100101) = 11111111 - 00100101 = 11011010。
    反碼的生成公式為:
    ( 3)數(shù)的補(bǔ)碼表示
    對正數(shù),同原碼表示 。如, +0100101 表示為00100101。對負(fù)數(shù),先將其表示為反碼,然后在該反碼的最低位加“1”,即得到它的補(bǔ)碼 。
    如, - 0100101 先將其表示為反碼為11011010 ,再在最低位加“1”得補(bǔ)碼為11011011。這個(gè)結(jié)果恰相當(dāng)于計(jì)算
    100000000( 2 8 )+(-00100101) = 11011011
    補(bǔ)碼的生成公式為: