原碼 反碼 補碼詳解

2021-06-29 12:49:58 字數 1608 閱讀 5524

在求解一些問題的時候,難免會涉及到補碼,特別是負數,它是以正數的補碼形式儲存在計算機中,有時候需要將補碼轉換成原碼,要是不理解其中的關係就很難下手。

下面先講一下機器數和真值,首先要理解什麼是機器數,它是數字在計算機中的二進位制表示形式,而真值則是字面上理解的意思。舉個例子,當機器字長為8位時,+3的機器數為0000 0011,-3的機器數為1000 0011,但是機器數並不等同於真值,就像1000 0011的真值是-3,而不是131。將乙個真值表示成二進位制字串的機器數的過程就稱為編碼,而機器數有原碼、反碼和補碼三種形式,而這些編碼方式中用的最多的就是剛開始提到的補碼。

下面挨個解釋一下概念:

原碼,也叫二進位制定點表示法,最高位為符號位,其餘為真值的絕對值。最顯著的特點就是便於理解;

反碼,可以理解成原碼與補碼之間的橋梁,正數的反碼與其原碼相同,負數的反碼是對其原碼逐位取反,符號位除外;

補碼,正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

以8位二進位制數為例表示以上編碼方式:

下面深入分析計算機採用補碼的原因:

1.為什麼不用原碼?

a.原碼中的0有兩種表示方式, 二義性明顯不可取

b.運算規則比較複雜,當有異號運算元運算時,需判斷絕對值的大小才能確定符號。

直接運算會出錯,例如1-1=1+(-1)=0。(00000001)原 +(10000001)原= (10000010)原= (-2) 顯然不正確。

2.為什麼不用反碼?

雖然解決負數加法運算問題,將減法運算轉換為加法運算,能夠得到正確的真值部分,但是它依舊有兩種表示0的方式,依舊有問題。

3.補碼的優點

a.解決了0的符號問題,1-1 = 1 +(-1) = [0000 0001]補+ [1111 1111]補=[0000 0000]補=[00000000]原,以前的-0[10000000]原可以用表示-128,[10000000]補+ [0111 1111]補= [1111 1111]補,-128+127=-1。

b.使得減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。

c.讓符號位作為數值直接參加運算,而最後仍然可以得到正確的結果符號位。

下面是幾種編碼的表示範圍,

這樣就很容易解釋為什麼補碼的範圍比原碼和反碼大1。

假設現在的標準時間為4點正,而有乙隻表已經是7點了,為了校準時間,可以採取兩種方法:一是將時針後退3格,二是將時針前進9格,兩者等效,也就是說9是(-3)對12 的補碼,可以用數學公式表示為 -3≡+9 (mod 12),mod在數學上稱為同余式。從這裡得到啟示,將負數用補碼表示時,可以把減法轉化為加法,與時鐘問題不同的是補碼運算時的模為128,,127是-1對128的模,所以2-1 =2+127 = 1。

如文中有錯誤,請大家多多指點。

原碼,反碼,補碼,詳解

本篇文章講解了計算機的原碼,反碼和補碼.並且進行了深入探求了為何要使用反碼和補碼,以及更進一步的論證了為何可以用反碼,補碼的加法計算原碼的減法.論證部分如有不對的地方請各位牛人幫忙指正 希望本文對大家學習計算機基礎有所幫助 一.機器數和真值 在學習原碼,反碼和補碼之前,需要先了解機器數和真值的概念....

原碼,補碼,反碼詳解

首先來記住規則 原碼到補碼的計算是 原碼的符號位不變,其餘位按位取反後加1.原碼到反碼的計算是 原碼的符號位不變,其餘位按位去反 然後來看一下原碼 反碼和補碼的定義 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值。比如如果是8位二進位制 1 原 0000 0001 1 原 1000...

原碼 反碼 補碼詳解

一.機器數和真值 1 機器數 任何乙個數在計算機中都是以二進位制形式表示,叫做機器數。機器數是帶符號的,在計算機用乙個數的最高位存放的是符號,正數為0,負數為1.例 十進位制中的數 5,計算機字長為8位,轉換成二進位制就是00000101。如果是 5,就是 10000101 那麼,這裡的 00000...