数学や計算機科学において、補数法は、正負の整数の対称的な範囲を、その範囲全体で同じ加算アルゴリズム(またはメカニズム)を使用できるように符号化する手法です。与えられた桁数に対して、可能な数の表現の半分は正の数を符号化し、残りの半分はそれぞれの加法逆数を表します。互いに加法的な逆数のペアは補数と呼ばれます。したがって、任意の数の減算は、その補数を加えることによって実現されます。任意の数の符号の変更は、その補数を生成することによって符号化され、これは非常に単純で効率的なアルゴリズムで実行できます。この方法は機械式計算機で一般的に使用され、現代のコンピュータでもまだ使用されています。基数 補数の一般化された概念(以下で説明)は、ミディの定理など、数論においても価値があります。
10進数で表された数の9の補数は、各桁をその桁から9を引いた数に置き換えることによって得られます。10進数y(減数)から別の数x(被減数)を引くには、次の2つの方法があります。
最初の方法では、xの9の補数をyに加えます。そして、得られた結果の9の補数を生成することで、目的の結果を得ます。
2番目の方法では、 yの9の補数をxに加え、その合計に1を加えます。そして、結果の一番左の桁「1」を捨てます。一番左の「1」を捨てることは、固定桁数の電卓やコンピュータでは特に便利です。なぜなら、その「1」の格納場所がないため、計算中に単純に失われるからです。9の補数に1を加えたものは、10の補数と呼ばれます。
補数法は他の基数(基数)にも拡張できます。特に、ほとんどのデジタルコンピュータでは、減算の実行、負の数を基数2または2進数で表現すること、計算のオーバーフローをテストするために使用されます。[ 1 ]
の 基数補数-桁の数字基数では次のように定義される。実際には、基数補数は、減数補数に 1 を加えることで簡単に得られます。減数補数は、これは基数補数と同じくらい計算が難しいように見えるが、実際にはもっと簡単である。単に数字です繰り返し2進数で 1 回。これは、
(等比数列の公式も参照)。これを知ると、各桁を に関して補数にすることで、数の減数基数補数を求めることができます。つまり、各桁を減算するから。
の引き算から減数基数補数を用いた操作は、次のように実行できます。減数基数補数を加算します。に取得するまたは同等にこれは、の減数基数補数です。さらに、減数補数を取ると、結果として、望ましい答えが得られます。。
あるいは基数補数を用いると、は、の基数補数を加えることによって得られる。に取得するまたはと仮定すると結果は以下以上になりますそして先頭部分を削除する結果から引くことは、結果としてまたは単に望ましい結果。
10進数では、基数補数は10の補数、減数補数は9の補数と呼ばれます。2進数では、基数補数は2の補数、減数補数は1の補数と呼ばれます。他の基数における補数の命名法も同様です。ドナルド・クヌースをはじめとする一部の人々は、基数補数と減数補数を区別するためにアポストロフィの位置を使用することを推奨しています。この用法では、4の補数は基数4の数の基数補数を指し、4の補数は基数5の数の減数補数を指します。しかし、基数が明らかな場合(ほとんどの場合)、この区別は重要ではなく、アポストロフィの位置の微妙な違いは一般的な慣習ではありません。ほとんどの著者は1の補数と9の補数を使用し、多くのスタイルマニュアルではアポストロフィを省略して、1の補数と9の補数を推奨しています。
10進数の9の補数とは、その数に9を加えると9になる数のことです。例えば、3の9の補数は6、7の9の補数は2、といった具合です(表を参照)。より大きな数の9の補数を求めるには、各桁をその9の補数に置き換えます。
次の引き算の問題を考えてみましょう。
873 [x、被減数] - 218 [y、減数]
1. 被減数 (873) の 9 の補数を計算します。
999 - 873 = 126
2. それを減数(218)に加えます。
126 [xの9の補数 = 999 - x] + 218 [y、減数] ————— 344 [999 - x + y]
3. 次に、結果の9の補数を計算します。
344 [結果] 655 [344の9の補数 = 999 - (999 - x + y) = x - y、これが正解です]
1. 218の9の補数を計算します。結果は781です。218は3桁なので、これは999から218を引くことと同じです。
2. 次に、そして9人組の既に使われています。
873 [x] + 781 [yの9の補数 = 999 - y] ————— 1654 [999 + x - y]
3. 次に先頭の「1」を削除して、654とします。
1654 -1000 [-(999 + 1)] ————— 654 [-(999 + 1) + 999 + x - y]
4. これはまだ正しくありません。最初のステップで、方程式に999が加えられました。次に、先頭の1が削除されたときに1000が引かれました。したがって、得られた答え(654)は正しい答えより1つ少なくなっています。これを修正するために、答えに1を加えます。
654 + 1 ————— 655 [x - y]
1を加えると655となり、これが元の引き算の問題の正解です。最初のステップでyの10の補数を使用すれば、最後のステップである1を加える手順は省略できます。
次の例では、引き算の結果の桁数は、:
123410 [x、被減数] - 123401 [y、減数]
最初の方法を使用すると、9の補数の合計はそしては
876589 [xの9の補数] + 123401 [y] ———————— 999990
999990の9の補数は000009です。先頭のゼロを取り除くと、目的の結果である9が得られます。
減数が被減数よりも桁数が少ない。2番目の方法では、先頭にゼロを追加する必要があります。これらのゼロは、補数を取るときに先頭の9になります。例:
48032 [x] - 391 [y]
書き換え可能
48032 [x] - 00391 [y 先頭にゼロが付く]
00391をその9の補数に置き換えて1を加えると、次の合計が得られます。
48032 [x] + 99608 [yの9の補数] + 1 ——————— 147641
先頭の1を削除すると、正解は47641になります。
補数法は、特に2進数(基数2)において有用です。なぜなら、1の補数は各ビットを反転させること(「0」を「1」に、1を「0」に)することで非常に簡単に得られるからです。2の補数を得るには、最下位ビットへの桁上がりをシミュレートすることで1を加えることができます。例:
0110 0100 [x、100に等しい] - 0001 0110 [y、10進数で22に相当]
合計は次のようになります。
0110 0100 [x] + 1110 1001 [y の 1 の補数 = 1111 1111 - y] + 1 [2の補数を取得するには = 1 0000 0000 - y] ——————————— 10100 1110 [x + 1 0000 0000 - y]
最初の「1」を削除すると、答えは0100 1110(10進数で78)になります。
補数法は通常、オペランドが正であり、y ≤ xという論理制約があることを前提としています。任意の整数の加算と減算は通常、符号を比較し、2つを加算するか、大きい方から小さい方を減算し、結果に正しい符号を付けることによって行われます。
x < yの場合どうなるか見てみましょう。この場合、加算後に消去する「1」の数字はありません。より小さくなります例えば、(10進数で):
185 [x] - 329 [y]
yを補数にして加えると次のようになります。
185 [x] + 670 [yの9の補数] + 1 ————— 856
この時点では、引き算によって計算を完了する簡単な方法はありません。(この場合は1000)先頭の1を無視することはできません。期待される答えは-144ですが、これは見た目ほどかけ離れていません。856は144の10の補数です。この問題は、いくつかの方法で解決できます。

補数法は、歯車を逆回転させる方法の代替として、多くの機械式計算機で使用されていました。例えば、次のようになります。
補数法は、符号付き数の表現方法に関わらず、デジタルコンピュータにおいて広く用いられている。しかし、必要な回路は表現方法によって異なる。
補数法は、会計帳簿を手書きで作成していた時代に、誤りを訂正するために用いられた方法である。ある列の数値を削除するには、会計担当者は削除する数値の10の補数を新しい数値として追加した。この数値の桁には、特別な値であることを示すために横棒が引かれた。その後、列全体の数値を合計することで、訂正された結果を得ることができた。
合計金額を補完する形で、レジ係が単一の額面の通貨でのお釣りを、その通貨の基本額の整数乗で計算すると便利です。十進法通貨の場合、これは10、100、1,000などとなり、例えば10ドル札が該当します。
小学校では、暗算に役立つ近道として、補数法が教えられることがあります。[ 3 ]減算は、減数 の 10 の補数(9 の補数に 1 を加えたもの)を加えることで行います。この加算の結果は、差が正になることが明らかな場合に使用され、そうでない場合は、加算結果の 10 の補数が使用され、負としてマークされます。同じテクニックは、加算機での減算にも有効です。