2進数システムの負の数表現において、1の補数に対する2の補数の利点は何ですか?バイナリシステムの数値の特定のビット表現に格納されている値の範囲にどのように影響しますか?
6 に答える
1の補数に対する2の補数の主な利点は、2の補数がゼロに対して1つの値しかないことです。1の補数には、「正の」ゼロと「負の」ゼロがあります。
次に、1の補数を使用して数値を加算するには、最初に2進数の加算を実行してから、エンドアラウンドキャリー値を加算する必要があります。
2の補数は、ゼロの値が1つだけであり、キャリー値を必要としません。
また、保存されている値の範囲がどのように影響を受けるかについても質問しました。8ビットの整数値について考えてみます。最小値と最大値は次のとおりです。
Notation Min Max
========== ==== ====
Unsigned: 0 255
One's Comp: -127 +127
Two's Comp: -128 +127
参照:
主な利点は次のとおりです。
1には、
-0
(11111111
)と+0
( )があります。00000000
つまり、同じに対して2つの値があり0
ます。一方、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の補数#1の利点
2の補数表現では、値ゼロは、すべてのビットをゼロに設定することによって一意に表されます。
****
2の補数#2の利点
** 2の補数表現で2つの符号付き整数に対して算術演算(加算、減算、乗算、除算など)を実行する場合、2つの符号なし整数(つまり、符号ビットなし)...ただし、ハイキャリー(または減算のハイボロー)を破棄します
2の補数#3の利点
2の補数表現のこのプロパティはそうです
事実上すべての一般的な人が信じられないほど便利です
現在入手可能な目的のコンピューターは、2の補数を使用しています。なんで?2の補数を使用すると、負の値を含む算術演算に特別なアルゴリズム(したがって追加の回路)が必要ないためです。
符号付きビット表現に対する2の補数のもう1つの大きな利点は、2の補数表現がハードウェアで簡単に操作できることです。
2の補数は、負の数を表すためのものではなく、逆数です。
A + B'(B'はBの2の補数)を実行してA-Bを与えることができることを意味します。つまり、加算器ですべてを実行でき、減算器は必要ありません。