前のセクションでは、1 の補数を使用して加算や減算などの算術演算を実行する方法を学びました。このセクションでは、2 の補数を使用してこれらの演算を実行する方法を学習します。
女優ラクル プリート シン
2の補数を使った加算
2 の補数を使用して 2 つの 2 進数を加算する場合、次の 3 つの異なるケースが考えられます。
ケース 1: 正の数の方が大きい場合に、正の数と負の数を加算します。
最初に、指定された負の数の 2 の補数を見つけます。与えられた正の数と合計します。エンドアラウンド キャリー 1 を取得した場合、数値は正の数になり、キャリー ビットは破棄され、残りのビットが最終結果になります。
例: 1101 と -1001
- まず、負の数 1001 の 2 の補数を求めます。したがって、2 の補数を求めるには、すべての 0 を 1 に、すべての 1 を 0 に変更するか、数値 1001 の 1 の補数を求めます。数値 1001 の 1 の補数は 0110 で、結果 0110 の LSB に 1 を加算します。したがって、数値 1001 の 2 の補数は 0110+1=0111 となります。
- 両方の数字、つまり 1101 と 0111 を加算します。
1101+0111=1 0100 - 両方の数値を加算すると、エンドアラウンド キャリー 1 が得られます。エンドアラウンド キャリーは破棄されます。したがって、両方の数字を足すと 0100 になります。
ケース 2: 負の数の方が大きい場合に、正の値と負の値を加算します。
最初に、正の値と負の数の 2 の補数値を加算します。ここではエンドアラウンドキャリーは見当たりません。したがって、結果の 2 の補数を取得して最終結果を取得します。
注: 結果は負の値になります。
例: 1101 と -1110
- まず、負の数 1110 の 2 の補数を求めます。したがって、2 の補数を求めるには、1 の補数値 0001 の LSB に 1 を加えます。
0001+1=0010 - 両方の数字、つまり 1101 と 0010 を追加します。
1101+0010= 1111 - 最終結果である結果 1110 の 2 の補数を求めます。したがって、結果 1110 の 2 の補数は 0001 であり、負の数であることを識別できるように、数値の前に負の符号を追加します。
ケース 3: 2 つの負の数の加算
この場合、まず両方の負の数の 2 の補数を見つけてから、これらの両方の補数を加算します。この場合、常に LSB に追加されるエンドアラウンド キャリーを取得し、最終結果は忘れて、結果の 2 の補数を取得します。
注: 結果は負の値になります。
例: 5 ビット レジスタの -1101 および -1110
- まず、負の数 01101 と 01110 の 2 の補数を見つけます。したがって、2 の補数を見つけるには、これらの数値の 1 の補数の LSB に 1 を加えます。数値 01110 の 2 の補数は 10010、01101 は 10011 です。
- 両方の補数、つまり 10001 と 10010 を加算します。
10010+10011= 1 00101 - 両方の数値を加算すると、エンドアラウンド キャリー 1 が得られます。このキャリーは破棄され、最終結果は結果 00101 の 2 の補数になります。したがって、結果 00101 の 2 の補数は 11011 となり、負の値を加算します。負の数であることを識別できるように、数値の前に記号を付けます。
2の補数を使用した減算
2 の補数を使用して 2 つの 2 進数を減算する次の手順です。
- 最初のステップでは、減数の 2 の補数を求めます。
- 補数と被減数を加算します。
- 両方の数値を加算してキャリーを取得した場合、このキャリーを破棄し、結果は正になります。そうでない場合は、結果の 2 の補数が取られ、結果は負になります。
例 1: 10101 - 00111
減数 00111 の 2 の補数、つまり 11001 を計算します。次に、それらを合計します。それで、
10101+11001 =1 01110。
上記の結果では、キャリー ビット 1 が得られます。したがって、このキャリー ビットを破棄し、残りが最終結果の正の数になります。
例 2: 10101 - 10111
減数 10111 の 2 の補数を計算すると、01001 になります。次に、両方の数値を加算します。それで、
10101+01001 =11110。
上記の結果では、キャリービットを取得できませんでした。したがって、結果の 2 の補数、つまり 00010 を計算します。これは負の数であり、最終的な答えになります。