コンピュータ科学において、符号絶対値表現(原码)、1の補数、2の補数は数値の表現方法であり、コンピュータ内の数値の算術演算、特に二進数の加算・減算を簡素化するために用いられます。以下でこれら3つの表現方法について簡単に紹介します。

  1. 原码:符号絶対値表現は最も直感的な表現方法であり、数値を符号を含めて直接二進数で表します。符号絶対値表現では、最上位ビット(最左ビット)が符号ビットで、0 は正の数、1 は負の数を示します。残りのビットは数値そのものを表します。例えば、十進数の +5 の符号絶対値表現は次のように表されます。0000 0101、一方、-5 の原码表現は1000 0101。

  2. 反码:1の補数は主に負の数を表すために使用されます。正の数では、その1の補数は符号絶対値表現と同じです。負の数では、1の補数は、符号絶対値表現の符号ビット以外のすべてのビットを反転(0 を 1 に、1 を 0 に)したものです。例えば、十進数の -5 の1の補数は次のように表されます。1111 1010。

  3. 补码:2の補数はコンピュータで最も一般的に用いられる表現方法であり、2進数の加算演算に使用されます。正数の場合、その2の補数は符号付き絶対値表現と同じです。負数の場合、その2の補数は1の補数に1を加えたものです。2の補数の重要な特徴として、任意の数の2の補数とその数自体を加算すると、結果は必ず0になります。例えば、10進数の -5 の2の補数表現は1111 1011。

2の補数の使用により、コンピュータの算術演算を簡素化できます。加算と減算を加算演算に統一できるからです。減算を行う場合、減数の2の補数を被減数に加算することで、結果を得ることができます。

ここに2の補数の演算を説明する簡単な例を示します。

  • 十進数で 5 - (-3) を計算すると仮定します。
  • まず、2つの数を二進数に変換します:5 の二進数は0000 01015 は正の数なので、その2の補数も 00000101 です。-3 の2の補数表現:3 の符号絶対値表現は 00000011 で、反転すると 11111100、1 を加えると 11111101 になるので、-3 の2の補数表現は 11111101 です。
  • 次に、問題を加算に変換します:5 - (-3) は 5 + 3 と同じなので、5 と 3 の2の補数を加算する必要があります。
  • その後、5 と 3 の2の補数を使って二進数の加算演算を行います:0000 0101 + 0000 0011 = 0000 1000。
  • 最後に、結果を10進数に変換し直す:0000 10008に等しく、これは 5 + 3 の結果と一致します。

原码(Sign-Magnitude)

概念:

  • 符号絶対値表現は、符号付き数を表す最も簡単な方法の1つです。
  • 最上位ビット(最左ビット)を使用して符号を表します:0 は正の数、1 は負の数を示します。
  • 残りのビットは数値の大きさを表します。

规则:

  • 正の数の場合:符号絶対値表現はその二進数の値と同じです。
  • 負の数の場合:その絶対値の二進数表現を符号絶対値表現とし、最上位ビットを1(負の数を示す)に設定します。

示例:

  • 8ビット符号絶対値表現:
    • +5:00000101
    • -5:10000101

反码(Ones' Complement)

概念:

  • 1の補数は、符号絶対値表現の数値部分をビットごとに反転(0 を 1 に、1 を 0 に)することで得られます。
  • 正数の1の補数は原码と同じです。
  • 負の数の1の補数は、その符号絶対値表現の符号ビットを除くすべてのビットを反転したものです。

规则:

  • 正数については、1の補数は原码と同じです。
  • 負の数の場合、1の補数は符号絶対値表現のすべてのビット(符号ビットを除く)を反転したものであり、各二進ビットを 0 から 1 に、または 1 から 0 に変更します。

示例:

  • 8ビット1の補数表現:
    • +5:00000101
    • -5:11111010

补码(Two's Complement)

概念:

  • 2の補数は、1の補数に1を加えることで得られます。
  • 正数の2の補数は原码と同じです。
  • 負数の2の補数は、その1の補数に1を加えたものです。

规则:

  • 正数については、2の補数は原码と同じです。
  • 負の数の場合、2の補数は1の補数に1を加えたものです。

示例:

  • 8ビット2の補数表現:
    • +5:00000101
    • -5:11111011(1の補数は11111010、1を加算して11111011となる)

总结

  • 原码:単純だが、ゼロが2つある。
  • 反码:問題の一部は解決されたが、依然として2つのゼロが存在します。
  • 补码:最も一般的で効果的であり、ゼロは1つだけで、コンピュータの加算・減算演算を簡素化します。

コンピュータ内部では、符号付き整数を2の補数で表すことが広く行われています。これは、ハードウェア設計と演算処理を簡素化するためです。これらの概念を理解することは、コンピュータの低レベルの演算メカニズムや一部のアルゴリズムの実装原理を理解するのに役立ちます。