補数
x を b 進法で n 桁の非負の整数とする。 x に対する基数の補数(英: radix complement)は以下のように定義される:
b n − x {\displaystyle b^{n}-x}
基数が文脈から明らかなら、単に b の補数(英: b's complement)と呼ばれる(例えば二進法における基数の補数は2の補数と呼ばれる)。 同様に、x に対する減基数の補数(英: diminished radix complement)は以下のように定義される:
( b n − 1 ) − x {\displaystyle (b^{n}-1)-x}
基数が文脈から明らかなら、単に (b − 1) の補数(英: (b − 1)s' complement)と呼ばれる(例えば二進法における減基数の補数は1の補数と呼ばれる)。
補数は身近なところでも利用される。ほぼ無意識のうちに使っているが、繰り上がりのある足し算で使われる 。 例えば、「8 + 7 = 15] という計算を考える。まず、7 に何を足せば 10 を作れるかを考えると 3 である。8 を 5 + 3 に分解して、3 + 7 で 10 を作り、1 の位は残った 5 であるから、合わせて 15 となる。 つまり、1の位の計算で、7 を足す代わりに 7 の補数である 3 を引くことで、繰り上がりのある計算ができる。 これをきちんと数式で書くと
x + y = x + y + b 1 − b 1 = b 1 + x − ( b 1 − y ) {\displaystyle {\begin{aligned}x+y&=x+y+b^{1}-b^{1}\\&=b^{1}+x-(b^{1}-y)\\\end{aligned}}}
である。 式の最右辺において、 b 1 {\displaystyle b^{1}} は上の位への繰り上がりである。 残りの x − ( b 1 − y ) {\displaystyle x-(b^{1}-y)} が、 y {\displaystyle y} を足す代わりに、 y {\displaystyle y} の補数を引くことを意味する。
この計算方法は、そろばんでも同様に使われる。 つまり 7 を足すときに、繰り上がりが発生するときは、一の珠を 3つ下げる。ほかの数字でも同様。 なお、そろばんでは五珠もあるので、10 の補数のほか、5 の補数も使わなければならない。
繰り下がりのある引き算でも同様である。
補数を利用すると、正整数の減算を加算処理で行うことができる。
以下に、10 進 5 桁の減算 52934 − 38917 = 14017 {\displaystyle 52934-38917=14017} を、補数を用いて加算処理に置き換えた例を説明する。被減数を x、減数を y とし、減算結果を x − y ≡ z {\displaystyle x-y\equiv z} とする。
減数 y の減基数の補数を求める。この計算は、各桁について補数を求めればよいので桁借りが発生せず、簡単に行うことができる。
y ′ ≡ ( 10 5 − 1 ) − y {\displaystyle {\begin{aligned}y'&\equiv (10^{5}-1)-y\end{aligned}}}
⟹ [ 9 9 9 9 9 − 3 8 9 1 7 6 1 0 8 2 ] {\displaystyle \Longrightarrow \left[\quad {\begin{matrix}&9&9&9&9&9\\-&3&8&9&1&7\\\hline &6&1&0&8&2\\\end{matrix}}\quad \right]}
減数 y の基数の補数を求める。これは減基数の補数 y ′ {\displaystyle y'} に 1 を加えるだけである。
y ′′ ≡ 10 5 − y = y ′ + 1 {\displaystyle {\begin{aligned}y''&\equiv 10^{5}-y\\&=y'+1\\\end{aligned}}}