計算機基礎--原碼、反碼、補碼


聲明:以下二進制數據都是指八比特位長度的二進制數;以下十進制數都是指的整數。

1、什么是原碼?

我們來看一下百度百科的定義:

原碼(true form)是一種計算機中對數字的二進制定點表示方法;

原碼表示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1,其余位表示數值的大小。

舉個例子:

100的源碼怎么表示?--答案是:0 110 0100

-100的源碼怎么表示?--答案是:1 110 0100

此外,還要注意一點:

百度百科中看到一句話:原碼不能直接參加運算,可能會出錯。

他舉出一個例子:在數學中 1+(-1)=0;但是用二進制進行計算的時候就會變成:0000 0001+1000 0001=1000 0010,換算成十進制是 -2。顯然結果是錯誤的。

2、什么是反碼?

反碼通常是用來由原碼求補碼、或者由補碼求原碼的過渡碼。

那么同一個數的反碼與原碼的對應關系是什么呢?反碼跟原碼是正數時,一樣;負數時,反碼就是原碼符號位除外,其他位按位取反。

舉個例子:

100的原碼是?0 110 0100

100的反碼是?0 110 0100

========

-100的原碼是?1 110 0100

-100的反碼是?1 001 1011

從上面的例子來看

I、想知道一個十進制數的二進制反碼表示形式,得先知道這個十進制數的原碼。也就是說,原碼雖然簡單,但卻非常重要。

II、原碼、反碼都是數值在計算機中的表示方法,他們倆首位都表示符號位,即1為負、0為正;其余的為數值位。原碼的數值位的值就是所表示數的真值。反碼的數值位的意義我們不去深究。

3、什么是補碼?

在了解什么是原碼的時候,我們就發現了原碼在二進制加減運算中存在問題。

所以,計算機系統,數值一律采用補碼來表示和存儲。

原因是,補碼能夠將符號位和數值位統一處理;同時,減法和加法也可以統一處理。

在百度百科中,關於補碼的概念引入,他給出了一個非常有趣的例子:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

這個例子解釋了以n值為模的系統里,減法問題如何轉化成加法問題的--把減數用相應的補數表示就可以了。

而這個例子中出現的補數的概念,用在計算機對於數值的處理上,就是 補碼。

那么補碼和原碼的對應關系是怎么樣的呢?

I、對於正數,他的原碼、反碼、補碼都是一樣的,即都是原碼的表示形式。

比如:100的原碼 0 110 0100;反碼 0 110 0100;補碼 0 110 0100。

II、對於負數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變--這不就是求反碼的過程么。),然后加1。

比如:-100的原碼 1 110 0100;除符號位外按位取反 1 001 1011;再加1:1 001 1100(即為-100在計算機中的存儲形式--也就是-100的補碼)。

III、對於-100求補碼的方法,還有一種:

就是記住這個口訣:對負數求補碼,先寫出其絕對值的原碼,再按位取反,再加1。

我們來試一下:-100求補碼,先找出-100的絕對值100的原碼:0 110 0100;再按位取反 1 001 1011;再加1: 1 001 1100。

其實這兩種,在第二步取反的時候,就得到了一致的結果了,所以在第三步再加1,得到的結果一樣。所以上面兩種方法就看個人習慣了。。。

IV、對於0的補碼是唯一的:0000 0000。

(+)0我們就不必說了,符號位為0的正數,原碼、反碼、補碼都一樣:0000 0000。

(-)0求補碼→按位取反→1 111 1111→再加1→1 0000 0000(這里我們講解的是8位二進制數,所以最高位1舍去)→ 0000 0000 (補碼)。

最后總結:原碼、反碼、補碼(以下都是指整數的八位二進制形式)

對於正數 其原碼、反碼、補碼都一樣。以后遇到正數求補碼、反碼不要慌,寫出原碼就是答案。

對於負數 其反碼=原碼(除符號位)按位取反;其補碼=負數的原碼先取反碼再加1。

4、計算機中存儲的8位二進制數能夠表示的取值范圍為什么是 -128~127

首先我們要在腦海中有一個概念:我們這里所說的二進制數是指在計算機中存儲的數,而在計算機中存儲的數是原始數據的補碼形式。

有了這個概念為前提,我們就好理解了:

接下來參考一下知乎里面的一個回答,更能夠幫助我們理解這個范圍問題:

https://www.zhihu.com/question/20458542

以上是對計算機系統中對於數的二進制表示形式的總結,記錄下來,以便以后查看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM