2の補数とデータ表現

2の補数

2の補数(two’s complement)は、\(n\)桁の2進数\(x\)に対して、

\[x+x_c=2^n\]

の関係を満たす\(x_c\)のことである。故に、2の補数\(x_c\)は

\[x_c=2^n-x\]

と表すことができる。

データ表現

2の補数は、負数の表現に用いられる。

コンピュータの世界では、nビットのデータは2^nでオーバーフローするため、2の補数は

\[x_c=-x\ \mathrm{mod}\ 2^n\]

とみなすことができる。

また、上位1ビットを符号ビットとし、0のときは正の数、1のとき負の数を表すと定義することで、次の表のように負数を割り当てることができる。

decimaloctaltwo’s complement (octal)data
00000000
10011111
20101102
30111013
4100100-4
5101011-3
6110010-2
7111001-1

注意すべきは、正数の絶対値に比べて負数の絶対値が1大きくなることである。

例えば8ビットではunsignedの場合は0から256を表すが、signedの場合は-128から127となる。

2の補数を用いる利点

2の補数を用いることで、足し算のみで計算が可能になる。

\[y-x = y+x_c\ mod\ 2^n\]

負数の表現方法には、

  • 符号・絶対値
  • 1の補数
  • 2の補数

などがあるが、現代では2の補数を用いた表現が最も一般的である。

お買い物カゴ