補数
テンプレート:読み仮名またはテンプレート:読み仮名とは、ある数 テンプレート:Mvar との和が基準となる数 テンプレート:Mvar に等しくなるような数である[1]テンプレート:Sfnテンプレート:Sfn。すなわち、補数を テンプレート:Math とすればこれは テンプレート:Math を満たす。
テンプレート:Mvar を [[位取り記数法|テンプレート:Mvar 進法]]の基数の冪 テンプレート:Math とすればこれは、テンプレート:Mvar 進法で テンプレート:Math と表せる。従ってこの場合、非負の整数 テンプレート:Mvar に対する補数 テンプレート:Math は テンプレート:Mvar に足して テンプレート:Math 桁になる最小の整数と言える。
補数は計算機において、減算や負の数を表すためにしばしば利用される。
定義
テンプレート:Mvar を [[位取り記数法|テンプレート:Mvar 進法]]で テンプレート:Mvar 桁テンプレート:Efn2の非負の整数とする。 テンプレート:Mvar に対する基数の補数(テンプレート:Lang-en-short)は以下のように定義されるテンプレート:Sfnテンプレート:Sfn:
基数が文脈から明らかなら、単に テンプレート:Mvar の補数(テンプレート:Lang-en-short)と呼ばれる(例えば二進法における基数の補数は2の補数と呼ばれる)。 同様に、テンプレート:Mvar に対する減基数の補数(テンプレート:Lang-en-short)テンプレート:Efn2は以下のように定義されるテンプレート:Sfnテンプレート:Sfn:
基数が文脈から明らかなら、単に テンプレート:Math の補数(テンプレート:Lang-en-short)と呼ばれる(例えば二進法における減基数の補数は1の補数と呼ばれる)。
呼称
日本語において、文脈から基数が明らかでない状況で「テンプレート:Mvar の補数」と言った場合、「テンプレート:Math 進法における減基数の補数」と「テンプレート:Mvar 進法における基数の補数」のどちらを指すか曖昧である。例えば、「9の補数」は「9進法における基数の補数」と「10進法における減基数の補数」のいずれの意味でも用いられ得る。曖昧さを取り除くためには、「基数の補数」か「減基数の補数」のいずれであるかを示したり、基数が何であるかを示す必要がある。
英語において文章上は、例えば基数の補数を テンプレート:Enテンプレート:Efn2と書き、減基数の補数を テンプレート:Enテンプレート:Efn2と書くことで区別できるテンプレート:Sfn。
補数の利用・応用
繰り上がり(繰り下がり)のある計算
補数は身近なところでも利用される。ほぼ無意識のうちに使っているが、繰り上がりのある足し算で使われる [2]。 [3] 例えば、「8 + 7 = 15] という計算を考える。まず、7 に何を足せば 10 を作れるかを考えると 3 である。8 を 5 + 3 に分解して、3 + 7 で 10 を作り、1 の位は残った 5 であるから、合わせて 15 となる。 つまり、1の位の計算で、7 を足す代わりに 7 の補数である 3 を引くことで、繰り上がりのある計算ができる。 これをきちんと数式で書くと
である。 式の最右辺において、 は上の位への繰り上がりである。 残りの が、 を足す代わりに、 の補数を引くことを意味する。
この計算方法は、そろばんでも同様に使われる。 つまり 7 を足すときに、繰り上がりが発生するときは、一の珠を 3つ下げる。ほかの数字でも同様。 なお、そろばんでは五珠もあるので、10 の補数のほか、5 の補数も使わなければならない。
繰り下がりのある引き算でも同様である。
補数を利用した減算
補数を利用すると、正整数の減算を加算処理で行うことができる。
以下に、10 進 5 桁の減算 を、補数を用いて加算処理に置き換えた例を説明する。被減数を x、減数を y とし、減算結果を とする。
- 減数 y の減基数の補数を求める。この計算は、各桁について補数を求めればよいので桁借りが発生せず、簡単に行うことができる。
- 減数 y の基数の補数を求める。これは減基数の補数 に 1 を加えるだけである。
- 被減数 x と 減数 y の基数の補数とを足し合わせる。このとき、最上桁の桁上がりは無視する(つまり結果から を減ずる)。
このように、本来桁借りを考慮しなければならないような減算であっても、補数の概念を利用すれば加算処理に置き換えて計算することができる。
上に挙げたのは10進法の例であるが、これは任意の基数において成り立つ。
この性質により、負整数の表記法として基数の補数を採用すると、最上位桁からの桁上がり(桁あふれ・算術オーバーフロー)を無視すれば、通常の加算処理で負整数の加算(つまり正整数の減算)が行えることになる。この利点のため、2の補数は多くのコンピュータで負整数の内部表現に採用されている。