如何你看到了這篇文章,想必你應該是乙個愛思考,善於學習的人!
我們經常說:補碼=反碼+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...
為什麼要使用原碼 反碼 補碼
前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...
關於為什麼引入補碼,反碼的原因
前言 隨著學習計算機知識的加深,許多地方都遇到原碼 反碼 補碼。很多關於計算機的書籍都介紹原碼 反碼 補碼的表示方法,但是為什麼要用到原碼 反碼 補碼卻沒詳細說。為什麼要使用?它們的原理是什麼呢?我搜尋了許多資料,也查詢了許多書籍,終於弄明白了這個問題,收集整理如下。我們知道數值在計算機中表示形式為...