2進法の負の数表現で1の補数に対する2の補数の利点は何ですか?バイナリシステムの数値の特定のビット表現に格納されている値の範囲にどのように影響しますか?
1の補数に対する2の補数の主な利点は、2の補数にゼロの値が1つしかないことです。補数には、「正の」ゼロと「負の」ゼロがあります。
次に、1の補数を使用して数値を追加するには、最初にバイナリ加算を実行してから、エンドアラウンドキャリー値を加算する必要があります。
2の補数にはゼロの値が1つだけあり、キャリー値は必要ありません。
また、保存されている値の範囲がどのような影響を受けるかを尋ねました。 8ビットの整数値を考えてみましょう。以下が最小値と最大値です。
Notation Min Max
========== ==== ====
Unsigned: 0 255
One's Comp: -127 +127
Two's Comp: -128 +127
参照:
主な利点は次のとおりです。
1には-0
(11111111
)と+0
(00000000
)があります。つまり、同じ0
に対して2つの値があります。一方、2の補数では、0
(00000000
)の値は1つだけです。それの訳は
+0 --> 00000000
そして
-0 --> 00000000 --> 11111111 + 1 --> 00000000
1を使用した加算や減算などの算術演算を実行している間、余分なキャリービット、つまり1
を結果に追加して、正しい答えを取得する必要があります。
+1(00000001)
+
-1(11111110)
-----------------
= (11111111)
しかし、正しい答えは0
です。 0
を取得するには、結果にキャリービット1
を追加する必要があります(11111111 + 1 = 00000000
)。
2の補数では、結果を変更する必要はありません。
+1(00000001)
+
-1(11111111)
-----------------
= 1 00000000
負の整数: 2の補数は、負の整数に使用する意味があります。 1の補数は、2の補数を評価するのに役立つかもしれない単なる計算手法です。 2の補数の実際の(敗北した)ライバルは、負の整数の符号の大きさの表現でした。
オーバーフローなし: 1の補数には、負の整数に対する特別な使用法はありません。 2の補数は、ビットを変更することなく自然な加算および減算演算で使用できるため、理にかなっています。オーバーフローが発生しない場合、結果の符号ビットは正しい値です。この表記法のビット数の昇格は単純です。たとえば、8ビットの符号付き整数を16に昇格させるために、その上位バイトで整数値の符号ビットを単純に繰り返すことができます。
符号の大きさ:反対に、符号の大きさの表記は、人間が負の整数を表すために使用する方法にすぎません。ビット数の昇格と加算減算の算術演算は、この表記法では少し混乱しています。
2の補数表現では、すべてのビットをゼロに設定することにより、値ゼロが一意に表されます。
**
** 2の補数表現の2つの符号付き整数で算術演算(たとえば、加算、減算、乗算、除算)を実行する場合、2つの符号なし整数(つまり、符号ビットなし)...例外として、ハイキャリー(または減算のためのハイボロー)を捨てます。
Two's Complement表現のこのプロパティはそうです
現在利用可能な目的のコンピューターはTwo's Complementを使用しています。どうして?なぜなら、Two's Complementを使用すると、負の値を伴う算術演算に特別なアルゴリズム(したがって追加の回路)が必要ないからです。
符号付きビット表現に対する2の補数表現のもう1つの大きな利点は、2の補数表現がハードウェアで簡単に操作できることです。
2の補数は、負の数を表すためではなく、逆数です。
A + B '(B'はBの2の補数)を実行してA-Bを与えることができることを意味します。つまり、すべてを加算器で実行でき、減算器は不要です