元コード、逆コード、補コード演算

コンピューターの 2 進数の原理により、コンピューターは 0 と 1 で構成される 2 進数のみを認識できます。コンピューターにどのような命令が与えられても、最終的には 0 または 1 の一連の組み合わせに変換されます。したがって、これらの 2 進数間の演算も、元のコード、逆のコード、補数のコードなどの一連の規則と式によって実行する必要があり、以下に論理的な順序で説明します。

1. オリジナルコードの操作

当初は 2 進数間の演算が必要でした。設計された計算ルールは元のコードを使用して計算されました。元のコードの表現は、次の表のように、最上位ビットが数値の符号、つまり正負を表し、残りのビットが数値の絶対値の機械番号 (2 進数) を表します。

10進数 バイナリ オリジナルコード
1 1 00000001
2 10 00000010
3 11 00000011
-1 10000001
-2 10000010
-3 10000011

1+2 は元のコードを使用してプロセスを計算します: 00000001+00000010=00000011、結果は 3 です、正解です。

しかしこのとき、負の数の演算となると次のような問題が発生します。

3-1 (数値の減算は、その反対の数値の加算、つまり 3+(-1) と同じです) は、元のコードで計算されます。

00000011+10000001=10000100、結果は -4 となり、明らかに間違っています。

したがって、元のコードを使用して負の数を含む演算を計算するとエラーが発生するため、この問題を解決するために逆コード表現が提案されます。

2. 逆コード演算

1 の補数の表現: 次の表に示すように、正の数の 1 の補数はそれ自体であり、負の数の 1 の補数の最上位ビットは変更されず、残りのビットは反転されます。

10進数 バイナリ オリジナルコード 逆コード
1 1 00000001 00000001
2 10 00000010 00000010
3 11 00000011 00000011
-1 10000001 11111110
-2 10000010 11111101
-3 10000011 11111100

1 の補数の出現と式は、負の数を含む演算を解決します。

正の数の逆コードは元のコードと同じであるため、正の数と正の数の間の演算は影響を受けず、負の数が含まれる場合にも正しい演算を実行できます。

2-3: 00000010+11111100=11111110、逆コードが11111110である数値の元のコードは10000001、10進数に変換すると-1、正しいです。

1-3: 00000001+11111100=11111101、逆コードが11111101である数値の元のコードは10000010、10進数に変換すると2、正解です。

ただし、以下の場合は逆符号での計算はできません。

2-1 逆符号による計算処理:00000010+11111110=(1) 00000000、最上位桁がオーバーフローして省略されます。逆符号が 00000000 の数値の元の符号は 00000000、つまり 0 となり、エラーとなります。

3-1 逆符号計算処理: 00000011+11111110=(1) 00000001、最上位ビットのオーバーフローを省略すると、逆符号が 00000001 となる数値の元の符号は 00000001 となり、1、エラーとなります。

1-1 逆符号による計算処理: 00000001+11111110=11111111、逆符号が 11111111 の数値の元の符号は 10000000、結果は -0 になります。-0 は不可能なので、この時点では逆符号の演算は適用できなくなり、エラーとなります。

これを回避するために、2 の補数が提案されています。

3の補数演算

補数の表現: 正の数の補数はそれ自体であり、負の数の補数はその逆数に 1 を加えたものです。

10進数 バイナリ オリジナルコード 逆コード 補体
1 1 00000001 00000001 00000001
2 10 00000010 00000010 00000010
3 11 00000011 00000011 00000011
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-3 10000011 11111100 11111101

補数コードによる 1+1 計算処理: 00000001+00000001=00000010、結果 2、正しい

1-2 補数コードによる演算処理:00000001+11111110=11111111、結果は-1、正解です。

次に、2-1 の計算に進みます。

2-1の補数演算: 00000010+11111111=(1)00000001、補数が00000001(最上位ビットがオーバーフロー)である数値の元のコードはそれ自体、つまり10進数の1である00000001です、正しいです。

3-1 逆符号計算処理:00000011+11111111=(1)00000010、補数符号が00000010(最上位桁オーバーフロー)である数値の元の符号はそれ自体、つまり10進数で2の00000010で正解です。

1-1 補数コードによる計算処理:00000001+11111111=00000000、補数コードが00000000(最上位桁がオーバーフロー)の数の雨そのもの、つまり10進数の0である00000000が正しいです。

述べる:

元のコードを使用した結果も元のコードであり、逆コードを使用した結果も逆コードであり、補数コードを使用した結果も補数コードです。コンピュータには加算器がありますが、減算器がないため、減算は加算に変換されます。8 ビットの 2 進数で表され、コンピュータの語長によって決まります。16 ビットを使用して表すこともでき、最上位ビットは符号ビットを表します。コンピューターは計算に補数コードを使用しており、入力されたデータはコンピューター自体によって対応する補数コードに変換されます。



 

おすすめ

転載: blog.csdn.net/m0_51660523/article/details/121998628