3.1.4 數(shù)值的補(bǔ)碼表示法
觀察圖3.6中的時鐘,這是一個分成了12個點(diǎn)的圓。假設(shè)時鐘指針一步只能走到相鄰的整點(diǎn),那么時鐘一共只有12種不同的狀態(tài),我們稱之為時鐘的模。

圖3.6 時鐘解釋補(bǔ)碼
現(xiàn)在時鐘指針指向了5點(diǎn),我們要讓它回到0點(diǎn)。有兩種方法可以實(shí)現(xiàn):一種是直接回退5個小時(5-5),如圖3.7所示;另一種是繼續(xù)往前走7個小時(5+7),如圖3.8所示。

圖3.7 時鐘5-5

圖3.8 時鐘5+7
在第二種方法中,5+7=12,而12剛好是時鐘的模,此時指針指向了0。
為了讓指針回到0點(diǎn),我們只需要讓它加上模與當(dāng)前時間的差即可。因此,指針回退5小時與指針前進(jìn)7小時是等價的。我們可以用指針前進(jìn)來代替指針后退。
將這種思想帶入三位二進(jìn)制中,我們知道三位二進(jìn)制能表示8個不同的數(shù)字,因此它的模為8。要讓3回到0,我們可以讓3減去3,也可以讓3加上模與3的差,即8-3=5。因此,在三位二進(jìn)制中,-3可以用5的二進(jìn)制表示(即101)。
這種用加法來等效減法的二進(jìn)制表示法被稱為補(bǔ)碼表示法。
在補(bǔ)碼表示法中,正數(shù)的補(bǔ)碼就是其二進(jìn)制本身,而正數(shù)對應(yīng)的負(fù)數(shù)的補(bǔ)碼為模減去正數(shù)的二進(jìn)制。負(fù)數(shù)的補(bǔ)碼為模與正數(shù)的差的二進(jìn)制,如圖3.9所示。
補(bǔ)碼表示法通過最高位區(qū)分正數(shù)和負(fù)數(shù),并且巧妙地應(yīng)用了溢出,所得到的計算結(jié)果也是正確的。類似于鐘表只需要向前走就可以實(shí)現(xiàn)減法,計算機(jī)的電路設(shè)計也只需要設(shè)計加法電路,極大地簡化了計算機(jī)內(nèi)部電路的復(fù)雜程度。
當(dāng)然,求一個正數(shù)對應(yīng)的負(fù)數(shù)的補(bǔ)碼也有一個更為簡單的方法,如圖3.10所示。
(1)先寫出這個正數(shù)的二進(jìn)制。
(2)從二進(jìn)制的右邊開始,在遇到第一個1之前,全都填0。
(3)遇到第一個1之后,填1。
(4)將遇到1之后的全部取反。

圖3.9 負(fù)數(shù)的補(bǔ)碼為模與正數(shù)的差的二進(jìn)制

圖3.10 計算補(bǔ)碼的簡單方法
- PHP動態(tài)網(wǎng)站程序設(shè)計
- Oracle 12c中文版數(shù)據(jù)庫管理、應(yīng)用與開發(fā)實(shí)踐教程 (清華電腦學(xué)堂)
- 新編Premiere Pro CC從入門到精通
- Expert Data Visualization
- Spring快速入門
- 計算機(jī)應(yīng)用基礎(chǔ)案例教程
- PHP編程基礎(chǔ)與實(shí)踐教程
- 并行編程方法與優(yōu)化實(shí)踐
- 從零開始學(xué)Android開發(fā)
- Python 3 Object:oriented Programming(Second Edition)
- Java EE 8 and Angular
- Java RESTful Web Service實(shí)戰(zhàn)
- Raspberry Pi開發(fā)實(shí)戰(zhàn)
- LabVIEW數(shù)據(jù)采集(第2版)
- 分布式系統(tǒng)架構(gòu)與開發(fā):技術(shù)原理與面試題解析