補数とは
補数(ほすう、英: complement)とは、ある数
x に対して、足し合わせると基準となる数
C になるような数のことです。つまり、
x の補数を
xc とすると、以下の式が成り立ちます。
x +
xc =
C
C が
b 進法の基数の冪
bn である場合、
b 進法では
bn = 100…00
b と表されます。この時、非負
整数 x に対する補数
xc は、
x に足して
n + 1 桁になる最小の
整数と言えます。
補数は、コンピュータにおいて減算や負の数を表現するために広く用いられています。
補数の定義
x を
b 進法で
n 桁の非負
整数とします。
基数の補数 (radix complement)
x
に対する基数の補数は、以下のように定義されます。
b*
n -
x
基数が文脈から明らかな場合、単に
b の補数(
b's complement)と呼ばれます。例えば、2進法における基数の補数は2の補数と呼ばれます。
減基数の補数 (diminished radix complement)
x
に対する減基数の補数は、以下のように定義されます。
(b*
n - 1) -
x
基数が文脈から明らかな場合、単に (
b − 1) の補数 ((
b − 1)'s complement) と呼ばれます。例えば、2進法における減基数の補数は1の補数と呼ばれます。
呼称の注意点
日本語では、基数が明示されていない状況で「N の補数」と言うと、「N + 1 進法における減基数の補数」と「N 進法における基数の補数」のどちらを指すか曖昧になることがあります。例えば、「9 の補数」は「9 進法における基数の補数」と「10 進法における減基数の補数」の両方の意味で使われる可能性があります。曖昧さを避けるためには、「基数の補数」か「減基数の補数」かを明示するか、基数を明示する必要があります。
英語では、例えば基数の補数を nine's complement、減基数の補数を nines' complementと書き分けることで区別できます。
補数の利用と応用
繰り上がりのある計算
補数は、日常生活での計算にも利用されています。例えば、「8 + 7 = 15」の計算を考える際、まず 7 に何を足せば 10 になるかを考え、3 であることがわかります。8 を 5 + 3 に分解し、3 + 7 で 10 を作り、1 の位は残りの 5 であるから、合わせて 15 となります。
これは、1 の位の計算で、7 を足す代わりに 7 の補数である 3 を引くことで、繰り上がりのある計算を簡単に行えるようにしているのです。この考え方を数式で表すと以下のようになります。
x +
y =
x +
y +
b -
b
=
b +
x − (
b −
y)
この式の最右辺において、
b は上の位への繰り上がりを表します。残りの
x − (
b −
y) は、
y を足す代わりに
y の補数を引くことを意味します。この計算方法は、そろばんの計算でも同様に利用されます。
補数を利用した減算
補数を使うと、正
整数の減算を加算処理に置き換えることができます。例として、10 進 5 桁の減算 52934 - 38917 = 14017 を、補数を使って加算処理に置き換えてみましょう。被減数を
x、減数を
y とし、減算結果を
x -
y ≡
z とします。
1.
減数 y の減基数の補数を求める: これは各桁の補数を求めることで簡単に行えます。
2.
減数 y の基数の補数を求める: これは減基数の補数
y' に 1 を加えることで求められます。
3.
被減数 x と減数 y の基数の補数を足し合わせる: 最上位桁の桁上がりは無視します。
このように、本来は桁借りを考慮する必要がある減算でも、補数の概念を利用すれば加算処理に置き換えて計算できます。この性質は、任意の基数で成り立ちます。
負の数を表現するために基数の補数を利用すると、最上位桁からの桁上がりを無視することで、通常の加算処理で負
整数の加算(つまり正
整数の減算)が行えます。そのため、2の補数は多くのコンピュータで負
整数の内部表現に採用されています。
関連用語
加算器
2の補数
1の補数
符号付数値表現