為什麼定義補碼等於反碼加一,知其所以然

2021-10-09 06:48:53 字數 1264 閱讀 2565

如何你看到了這篇文章,想必你應該是乙個愛思考,善於學習的人!

我們經常說:補碼=反碼+1,但為什麼要這樣去定義補碼呢?補碼,反碼被早期計算機學家設計出來的目的是什麼呢?

下面我們就對上面的問題進行詳細解答。

ps:以下的舉例都用8位二進位制。

在上述問題中,二進位制原碼表示的正數與十進位制的正數是很好轉換的,那麼我們如何根據二進位制表示的正數去得到乙個對應的負數,讓他們相加的結果為0呢?

在用原碼表示的8位二進位制中,我們都知道1111 1111+0000 0001等於1 0000 0000結果溢位了,計算機在識別的時候只會識別後8位,第9位的1是不會識別出來的,也就是說在8位二進位制當中1 0000 0000 與0000 0000 是相等的,其結果也是0。

知道了這個一點之後,我們接下來原碼的相反數:

按照我們生活中的思維,

原碼+相反數=0000 0000

相反數 = 0000 0000 - 原碼

在8位二進位制中,把我們得出來的結論 0000 0000與 1 0000 0000相等的結論用上,變成如下式子:

相反數 = 1 0000 0000 - 原碼

相反數 = (1111 1111 + 0000 0001 )- 原碼

相反數 = 1111 1111 - 原碼 + 0000 0001

相反數 = (1111 1111 - 原碼 )+ 0000 0001

看到這裡我相信大家應該會感覺有點那味了,1111 1111 - 原碼 是什麼呢,這個不就是每一位都與原碼相反的二進位制數嗎,我們的學者把它稱為反碼,反碼反碼,不就是每一位都與原碼相反的二進位制數嗎。(比如原碼為0101 0101 的二進位制數,帶入1111 1111 - 原碼 這個式子中得 1111 1111 - 0101 0101 = 1010 1010 ,0101 0101 的反碼是 1010 1010)

把剛剛得到的結論帶入上式,

相反數 = 反碼 + 0000 0001

看到這一步大家是不是覺得更加有那味了,為了不把相反數這個名詞與反碼弄混淆,我們在二進位制中取了乙個新的名字補碼用來代替生活中的相反數一詞,當然這都是翻譯過來的名詞。最後我們得到如下表示式:

補碼 = 反碼 + 0000 0001

補碼 = 反碼 +1

以上例子是以8位二進位制為例來說明的,當然16,32位甚至更高位的二進位制數其推理過程與之類似。

目前我們的計算機基本上都是以補碼的格式程序儲存二進位制數,以補碼的形式進行運算二進位制數,這符合我們的邏輯思維,也加快的計算機的運算速度。

以上是個人的思考,如果有誤,還請大牛指出!

原碼 反碼 補碼以及為什麼要用反碼和補碼

原文遷移到 機器數乙個數在計算機中的二進位制表示形式,叫做這個數的機器數,機器數是帶符號的,在計算機中用乙個數的最高位存放符號,正數為0,負數為1,比如,十進位制中的 3,假設計算機字長為8位,轉換成二進位制就是0000 0011,如果是 3,就是1000 0011.那麼,這裡0000 0011和1...

為什麼要使用原碼 反碼 補碼

前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...

關於為什麼引入補碼,反碼的原因

前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...