補碼,原碼,反碼的意義

補碼,原碼,反碼

計算機組成原理中,有補碼,原碼,反碼的概念,但是一直搞不清楚爲什麼,只是記憶公式,不明白是怎麼來的,現在寫下來要如何理解各種碼之間的關係,以及怎麼來的。

補碼

我們用C語言來舉例。C語言中short是2個字節。則考慮如下語句:

short a = 5;

其中a在內存中的二進制表示爲:

0000 0000 0000 0101

在計算機中,我們想要把加法和減法都統一成一種相同的運算規則,不用再對加法和減法進行區分,所以就要引入補碼。

考慮 5+(-5)這種情況。當然,實際上就是5-5,但我們想要都統一成一種運算,所以就要看作是5+(-5)。當然,正確的結果應該是0纔對,不管你怎麼看待減法運算,結果肯定不能變。
-5的二進制表示爲(最高位爲符號位):

1000 0000 0000 0101

如果我們不做任何改變,直接把-5和5用二進制來相加,結果是:

1000 0000 0000 1010

也就是十進制裏的-10,很顯然,我們需要的是0,因此這種計算規則是錯誤的。
那麼如何讓結果是0呢?很簡單:觀察5的二進制表達:

0000 0000 0000 0101

我們對5進行按位取反,得到:

1111 1111 1111 1010

然後和5相加,很顯然,結果是:

1111 1111 1111 1111

此時,距離0只有一步之遙,只需要在結果上加1就行了,因爲short只有16位,所以進位就會益處,不用管了,因此a的8位全部是0,我們想要的0也就的出來了。

加1後得:

0000 0000 0000 0000

因爲 直接什麼都不變,用5+(-5)的二進制表示去相加,結果等於10,所以,我們就把-5用-5的補碼來表示,這樣相加就是0了,得到了正確的結果。因此,計算-5的補碼,就是把5(注意是5不是-5)的二進制表示,按位取反(包括符號位),然後加1得到的結果。而正數的補碼還是本身。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章