補碼的原理

補碼原理(二進制正負數加減法基礎)


     序言:在計算機裏,爲了區別正負數,採用第一位表示符號(正或負),這樣一來,在計算機的二進制裏做加法沒問題,但既有加法又有減法時問題就來了:如做1 - 1 =0 時

(0 001) + (1 001) = (1 010) = ( -2 ) 顯然不正確(原因是第一位是用來表示正或負號)。

爲了解決這個問題,人們想出了補碼的概念,亦即補碼的設計目的是: 

                  ⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則. 

                  ⑵使減法運算轉換爲加法運算,進一步簡化計算機中運算器的線路設計

以下介紹我對於補碼的一些理解。


    十進制中減一等於加上負一,我們知道時鐘(時鐘爲十二進制)裏“十點”減“三點”等於“七點”,而我們也知道“十點”加上“九點”也等於“七點”。利用這個原理,我們稱在時鐘的十二進制中,“三點”的補碼爲“九點”(因爲減三和加九等價,不記天數的增加)。


     在四位二進制裏(以四位爲例比較簡單介紹),我們知道“0001”加上“1111”等於“10000”,但“10000”超過了四位,故稱其爲溢出,並把最高位“1”捨去。舉例子:如果“0010”減“0001”,則等於“0001”,而我們也知道“0010”加“1111”也等於“0001”,這樣我們就在二進制裏實現減法向加法的轉換。而二進制裏的第一位是符號位(0表示正數,1表示負數),故數值即如表中“二”和“五”所示。通過上面補碼的一些規則我們知道減一(或加負一)等於加上一的補碼,這就需要尋找“五”(負數列)與“六”產生一一對應關係的規則才能找出有符號位的二進制減法向加法的轉換規則,根據觀察上表(或者說是試探吧)可知“五”和“六”的第一位都是一,只是後面三位有所不同,所以在保持第一位都是一的前提下對“五”的後三位進行“特殊”處理(按位取反然後再在末位加一,如“001”取反變成“110”,再加一變成“111”)即得到“六”的後三位,這就是“五”和“六”的一 一對應關係規則。


     綜合二進制正數和負數的這些規律我們得出下面這個二進制數的加減法均化爲加法計算的規律(也稱補碼運算):正數的補碼爲其本身(因其可以直接加),負數的補碼爲符號位保持“一”不變,後面的位取反然後再加一(即上面所說的“特殊”處理),作加減法時的公式爲


                                “補碼”+“補碼”=“得數的補碼”


,如4+(-3)=1的二進制計算是“0100”(4原碼爲“0100”)+“1101”(-3原碼爲“1011”)=“0001”(0001的補碼就是它本身,因0001是正數)。對於更多位的二進制運算也適用與此規律。取反加一是因爲兩個四位二進制數相加等於“10000”時(即互爲補數),已知其中一個數求其補碼:其中一個數就等於“10000”減去另外一個數,由於機器的原因限制了位長只能爲四位,故採用“10000”先減去一變成“1111”,再減去其中一個數,這樣的話在直觀上看來就是被減的數“取反”(即0變1,1變0);因爲之前減去了一,所以減了之後再加回一,這樣實現了“補數”之間的轉換,這就是取反加一的原因。


      特別地,0的二進制表示是“0000”,其補碼也就是它本身;- 8的二進制表示是“1000”,其補碼也是它本身,這是因爲- 8(“1000”)的後三位取反後是“111”,再加一是“1000”,因爲這是後三位,且- 8的符號位不能變,所以- 8的後三位加一後(即“1000”)的最高位 “一”溢出捨去,故- 8的補碼還是它本身。以上就是二進制正負數的加減法的補碼原理解析。

發佈了28 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章