2進数で、なぜ元のコード、アンチコードの補数があります

0と1、及び従って2つだけ種類の進数は、回路は、コンピュータに内蔵された小数演算回路よりもはるかに簡単であるからです。

1、元のコード

  n個の元のコードワード長のシステムでは左端のビットは符号を表し、であり、コンピュータに、我々は、最も左の「1」が負の値で、左端の2進数を表し、nは「0」のように、任意に定義された負の両者を生成しました正の数。システムのような値の範囲nビットのソース・ワード長は、で表すことができる( - (2 、N 1- -1)〜(2 N -1-。 -1))

  例えば、-3 10 = 1011 2   、+ 6 10 = 0110 2   。

  正の数であるコンピュータが負の数でき時点で。しかし、問題を提起し、私たちが見て、単純な加算演算を行ってみましょう。

  6 10 +( - 3 10)= 0110 1011 2 =(1)0001 = 17 10 

  6 10 +3 10 = 0110 2 0011 = 1001 2 =( - 1 10)。

  計算誤差ので、計算は、元のコードを直接実行することはできません。この問題を解決するために、カウンタコード(1の補数)と補体(2の補数)があります。

2、補数

  補体系において、nビットのワード長Nは正の整数であり、それ自体を補完0左端が、負-Nの補数のnビットワードNであり、以下のように定義されます:

  N * = 2 -N

  例えば、= -5 - N 10 = 1101 2、その相補N *対応する正の数に等しい5 = N。10は、以下の計算に参加し、N * = 10000 2 -0101 2 = 1011 2

   その後、別の、残りのビットが反転されたnビットのワード長負補体左端のシンボルビット不変の算出方法、及び右端の1に加えます。

  例えば、-N = -5 10 = 1101 2、N * = 1011

 

 2.1補加算器

  nビットのシンボルの2進数を追加する直接補システムを算出してもよいです。演算処理の追加は全て正のと同じ数であり、符号ビットが無視される必要が生成運びます以下の結果はn = 4つの異なる状況が生じます。

  図1に示すように、2つの正の数、及び2未満のN-  -1。

  3 10 + 4 10 = 0011 2 +0100 2 = 0111 2 = 7 10 ;(正しい結果)

  図2に示すように、2つの正の数、及び2より大きいN-  -1。

5 10 + 6 10 = 0101 2 0110 2 = 1011 = 11 10 > 2 3。 、(誤った結果)

  ( - (2範囲の2つのnビットのシンボル数算出結果場合。N 1- -1)〜(2 。N 1- -1))、結果がこれより大きい場合、それはオーバーフローと呼ばれています。

  正および負3、大きな絶対負を加えます。

。5 10 +( - 6。10)= 0101 2 1010 2 = 1111 2 = -1 10 <2 3 ;(正しい結果)

  図4に示すように、第三の場合と同じ、しかし絶対値は正、負よりも大きくなっています。

-5 10 + 6 10 = 1011 2 0110 2 =(1)0001 2 <2 3 ;(符号ビットは無視生成に、オーバーフロー、結果が正確ではありません)

  図5に示すように、2つの負の和、及び2未満の絶対値N--。1

  -3 2 +( - 4。2)= 1101 2 1100 2 =(1)1001年2 = -7 10 ;(キャリー、オーバフローなしの符号ビットを無視し、結果が正しいです)

  図6に示すように、2人の負の和、及び2よりも大きい絶対値N--。1

-5 10 +( - 6。10)= 1011 2 1010 2 =(1)0101 2 = -11 10 <-2 3。 、(結果がオーバーフロー、エラー結果は、5合計の符号付きの-11として表されます)

3、抗コード

  同様のコードで抗補体加算器、廃棄最後を運ぶが、nビット上に生成されていない再び添加し、右端のビット、キャリーサイクル(エンド持ち運び)と呼ばれます。前の2基の例に同じフロントを追加ポジティブ抗補体コード。アンチコードの残りが添加(N = 4)ここで、以下に示します。

  図3は、正および負の添加することにより、負の絶対値が大きくなります。

。5 10 +( - 6。10)= 0101 2 1001 2 = 1110 2 = -1 10 ;(正しい結果)

  4、および(3)同じ、しかし負より大きい正の数の絶対値。

-5 10 +6 10 = 1010 2 0110 2 =(1)0000 2

0000 2 0001 2 = 0001 2 = 1 10(サイクルキャリー、無オーバーフロー、結果が正確です)

  図5に示すように、2つの負の結果が2の絶対値よりも小さいN--。1

-3 10 +( - 4 10)= 1100 2 1011 2 =(1)0111 2

0111 2 0001 2 = 1000 2 = -7 10 ;(キャリーの周りに、オーバーフロー、結果が正確ではありません)

  図6に示すように、2つの負の数値が加算され、結果は2の絶対値よりも大きいN--。1

-5 10 +( - 6 10)= 1010 2 1001 2 =(1)0111 2

0111 2 0001 2 = 1000 2 = -7 10 ;(結果がオーバーフロー、エラー結果)

  注目すべきことに、2つの負の加算結果が肯定的であるので、エラーを検出することができます。

おすすめ

転載: www.cnblogs.com/Maxwill-Peng/p/11007093.html