1. 程式人生 > >(轉)我們為什麽要使用補碼?

(轉)我們為什麽要使用補碼?

等於 簡單 們的 得到 思路 解釋 發現 blog AI

轉自:http://blog.csdn.net/jiange_zh/article/details/47381115

想必對於原碼,反碼,補碼大家並不陌生,計算機專業的同學都會學到這方面的一些知識。

當初在學這部分的時候,只知道用補碼可以解決0和-0的問題,但是還是沒明白為什麽會想到用補碼。

前陣子看了斯坦福大學關於範式編程的公開課,裏面老師講了這方面的內容,三言兩語給出了一個簡單明了的解釋,頓時覺得好棒!

思路如下:

我們主要要解決的問題就是負數的表示,而眾所周知,絕對值相等的兩個正負數之和為0。

假設我們有正數 0000 0000 0000 1111,我們如何表示其相反數呢?一般我們的思路是,找一個數,跟它相加的結果等於0,但是我們發現,要找出一個與它相加後結果等於0的數還是要略加思考一下的(因為要計算進位),所以,為何不找出一個與它相加後結果是1111 1111 1111 1111的數,然後該數+1即是我們所要的答案啦。

於是,很容易的, 0000 0000 0000 1111 + 1111 1111 1111 0000 + 1 = 1111 1111 1111 1111 + 1 = (1)0000 0000 0000 0000

一目了然,1111 1111 1111 0001 就是我們想要的答案了,那麽我們是怎麽得到這個相反數的呢?

首先,找出一個數與它加起來結果是全1的,這個數便是它的反碼,然後這個數再加1,這便是它的相反數了,也是我們說的補碼。

我們檢驗一下0的情況,0000 + 1111 + 1 =(1)0000,其中1111 + 1 = (1)0000 = 0000,即+0和-0的二進制表示均為0000。

一個小小的例子解釋了為何補碼需要原碼取反之後再加1,是不是很神奇?

(轉)我們為什麽要使用補碼?