在二進位制數中,為什麼會有原碼 反碼 補碼

2022-08-14 05:48:08 字數 2143 閱讀 4065

由於二進位制只有0和1兩種數,因此在計算機中搭建運算電路時比十進位制運算電路簡單很多。

1、原碼

在n為字長的原碼系統中,最左側表示符號位,在計算機中,我們人為定義二級制負數最左側為『1』表示負值,二進位制正數最左側為『0』表示正數。這樣的n位字長原始碼系統能表示的數值範圍為(-(2n-1 -1)~(2n-1 -1))

例如,-310=10112   ,+610=01102  .;

雖然此時計算機即可以表示正數也可以表示負數。但是帶來了乙個問題,讓我們進行個簡單的加法運算看看。

610+(-310)=01102  +10112 =(1)00012  =1710  ;

610 +310 =01102 +00112  =10012 =(-110);

計算錯誤,故原碼不能直接做運算。為了解決此問題,就有了反碼(1』s complement)和補碼(2』s complement)。

2、補碼

在補碼系統中,乙個n位字長的正整數n的補碼為本身且最左側為0,但是乙個n位字長負數-n的補碼為n*  且有如下定義:

n* =2n  -n

例如,當-n=-510 =11012 ,它的補碼n*等於對應正數n=510 參與下列運算,n* =100002-01012 =10112 ;

另一種計算n位字長負數補碼的方法為最左側符號位不變,其餘位取反,然後最右側加1。

例如,-n=-510 =11012 ,n* =10112  ;

2.1補碼的加法

n位帶符號的的二進位制數的加法運算在補碼系統中可以直接計算。加法中的運算過程就像所有數是正數一樣,並且符號位產生的進製都需要忽略。以下n=4時不同情況出現的結果。

1、兩個正數相加,和小於2n  -1。

310+410 =00112+01002 =01112 =710;(結果正確)

2、兩個正數相加,和大於2n  -1。

510+610=01012+01102 =10112  =1110 >23;(結果錯誤)

兩個n位帶符號數進行運算時,結果範圍為(-(2n-1 -1)~(2n-1 -1)),大於此結果,稱為溢位。

3、正數與負數相加,負數的絕對值較大。

510+(-610)=01012+10102=11112 =-110

<23;(結果正確)

4、與第三種情況相同,只是正數絕對值比負數大。

-510+610=10112+01102=(1)00012

<23;(符號位產生的進製忽略,沒有溢位,結果正確)

5、兩個負數相加,和的絕對值小於2n-1 。

-32+(-42)=11012+11002=(1)10012=-710 ;(忽略符號位的進製,沒有溢位,結果正確)

6、兩個負數相加,和的絕對值大於2n-1 。

-510+(-610)=10112+10102=(1)01012 =-1110

<-23;(結果溢位,結果錯誤,-11帶符號為共需5位才能表示)

3、反碼

反碼與補碼加法類似,只是最後產生的進製不是丟棄而是再次加到n位和的最右位上,這被稱為迴圈進製(end-around carry)。正數反碼加法和前面補碼示例中前兩點相同。下面給出其餘的反碼加法情況(n=4)。

3、正數與負數相加,負數絕對值較大。

510+(-610)=01012+10012=11102=-110 ;(結果正確)

4、與(3)相同,只是正數比負數絕對值大。

-510+610=10102+01102=(1)00002;

00002+00012=00012 =110(迴圈進製,沒有溢位,結果正確)

5、兩個負數相加,結果的絕對值小於2n-1 。

-310+(-410)=11002+10112=(1)01112 ;

01112+00012=10002 =-710;(迴圈進製,沒有溢位,結果正確)

6、兩個負數相加,結果的絕對值大於2n-1 。

-510+(-610)=10102+10012=(1)01112;

01112+00012=10002 =-710;(結果溢位,結果錯誤)

值得注意,兩個負數相加結果為正,因此也能檢測出錯誤。

為什麼會有二進位制反碼和補碼以及關係

我們知道,乙個數在計算機中使用二進位制來表示的。以下都用乙個位元組來表示二進位制的儲存。例如 1表示成二進位制為00000001,1表示成二進位制為10000001.兩個正數相加計算機來十分方便,但是如果是乙個數減去乙個數會有正負之分,此時要比較出絕對值最大的那個數,然後加上符號位。這樣子做也太麻煩...

二進位制補碼為什麼是原碼取反加一

二.反碼和補碼的形式 三.補碼為什麼是原碼取反加一 四.總結 在二進位制數中,每一位僅有0和1兩個可能的數碼。所以計數基數為2。低位和相鄰高位間的進製關係是 逢二進一 為了表示數的正,負在二進位制數的前面增加一位符號位。符號位為0表示這個數為正數,符號位為1表示這個數為負數。這種形式的數稱為原碼。正...

二進位制原碼和補碼

當原碼為正數的時候,正數的原碼反碼補碼都相同,即00011的反碼也為00011,補碼也為00011.當原碼為負數的時候 反碼即按位取反 補碼為反碼加一,10011可表示 3,那麼符號位不變,其餘位按位取反即反碼11100.補碼便是11101.現代計算機多數以二進位制補碼的形式來存放整數。簡單的說,乙...