補数

補数とは



補数(ほすう、英: complement)とは、ある数 x に対して、足し合わせると基準となる数 C になるような数のことです。つまり、x の補数を xc とすると、以下の式が成り立ちます。

x + xc = C

Cb 進法の基数の冪 bn である場合、b 進法では bn = 100…00b と表されます。この時、非負整数 x に対する補数 xc は、x に足して n + 1 桁になる最小の整数と言えます。

補数は、コンピュータにおいて減算や負の数を表現するために広く用いられています。

補数の定義



xb 進法で 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 − (by)

この式の最右辺において、b は上の位への繰り上がりを表します。残りの x − (by) は、y を足す代わりに y の補数を引くことを意味します。この計算方法は、そろばんの計算でも同様に利用されます。

補数を利用した減算


補数を使うと、正整数の減算を加算処理に置き換えることができます。例として、10 進 5 桁の減算 52934 - 38917 = 14017 を、補数を使って加算処理に置き換えてみましょう。被減数を x、減数を y とし、減算結果を x - yz とします。

1. 減数 y の減基数の補数を求める: これは各桁の補数を求めることで簡単に行えます。
2. 減数 y の基数の補数を求める: これは減基数の補数 y' に 1 を加えることで求められます。
3. 被減数 x と減数 y の基数の補数を足し合わせる: 最上位桁の桁上がりは無視します。

このように、本来は桁借りを考慮する必要がある減算でも、補数の概念を利用すれば加算処理に置き換えて計算できます。この性質は、任意の基数で成り立ちます。

負の数を表現するために基数の補数を利用すると、最上位桁からの桁上がりを無視することで、通常の加算処理で負整数の加算(つまり正整数の減算)が行えます。そのため、2の補数は多くのコンピュータで負整数の内部表現に採用されています。

関連用語



加算器
2の補数
1の補数
符号付数値表現

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。