補数
数理論 へ戻る
大学生のための数学 へ戻る
2026.01.25


 補数とは、ある自然数に加えたときに1桁以上増す数のうち最も小さい数のことです。
 したがって、2進数 11 の補数は 1 で、2進数 10 の補数は 10 になります。

 10進数の自然数で考えます。 ab とします。 an 桁の数とします。
 cab = 10 n となるとき、 ca についてのアウフヘーベン数ということにしましょう。
 a についての補数 b を求めるには アウフヘーベン数 c から a を引けばよいです。

 ab の桁数が同じときには、a についての補数は b であり、b についての補数は a ですが、ab の桁数が異なるときには、a についての補数は b であるので b についての補数は a であるとするのは間違いになります。
 ab の桁数が同じ n 桁のとき、「 ab は アウフヘーベン数 10 n について互いに補数の関係になっている。」と言うことにしましょう。


 0 から 15 までの整数を2進数を使って表すと 0 〜 1111 になります。
 0 から 15 までの整数を16進数を使って表すと 0 〜 9,a,b,…f になります。

 −8 から 7 までの整数を2進数を使って表すと 1000 〜 0111 になります。
 4桁目の数は、1 ならば正の符号を表し、0 ならば負の符号を表します。
 4桁目の数が 0 ならば負の数であることはすぐにわかりますが、はたしてそれが何の数なのかはすぐに分かりません。次のようにすると分かります。
   3桁までの数の 0 と 1 を入れ替えてから 1 を加える
       ※ ただし、−8は 1000 であると覚えておいてください。
 たとえば、1101 ならば 011 です。011 は 10進数の 3 に当たりますので 1101 は 10進数で言うと−3 になります。

 全体集合を 0 〜 30 までの整数とし、15以下の数についてのみ足し算を認めるものとします。足し算、たとえば 15 + 15 を2進数で表すと、次のようになります。
   1111 + 1111 =→ 11110

 全体集合を−8 から 7 までの整数とし、足し算、たとえば−8 + 5 を2進数で表すと、次のようになります。
   1000 + 0101 =→ 1101

 全体集合を−8 から 7 までの整数とし、それを2進数で表し、−1 をかけて符号を変える演算をするには、次のようにします。
   4桁までの数の 0 と 1 を入れ替えてから 1 を加える
たとえば 0011 に−1 をかけると 1101 となります。

 全体集合を−8 から 7 までの整数とし、足し算、たとえば 5 +(−5) を2進数で表すと、次のようなります。
   0101 + 1011 =→ 10000
5桁目を消して4桁にすると、0000 になります。これは 0 という数を表しています。
 全体集合を−8 から 7 までの整数とし、4桁の2進数で表すと、n と−n はアウフヘーベン数 10000 について互いに補数の関係になっています。コンピューターをこの原理を使って引き算をしているのです。

 ※ 参照: 大学生のための数学 > プログラミング > 電子計算機のしくみ >(5)2進数の減法の電子計算方法

  
n を足す演算は時計回りに n 移動すること。
n を引く演算は反時計回りに n 移動すること。

3+7 → 0011 + 0111 =→ 1010 → −( 0110 ) → −6
5+3 → 0101 + 0011 =→ 1000 → −8
−2+5 → −1×( 0010 ) + 0101 → 1110 + 0101 =→ 11011 → 1011 → → 3
3−5 → 3+(−5)
    → 0011 +{−1×( 0101 ) } → 0011 + 1011 =→ 1110 → −( 0010 ) → −2
4−4 → 4+(−4)
    → 0100 +{−1×( 0100 ) } → 0100 + 1100 =→ 10000 → 0000 → 0
−2−5 → −2+(−5) → {−1×( 0010 ) }+{−1×( 0101 ) }
    → 1110 + 1011 =→ 11001 → 1001 → −( 0111 ) → −7
−6−4 → −6+(−4) → {−1×( 0110 ) }+{−1×( 0100 ) }
    → 1010 + 1100 =→ 10110 → 0110  → 6

 というわけで、集合を−8 から 7 までの整数とし、加法や減法を以上のように定義すると、「この集合は加法と減法に関して閉じている」ことになります。

数字を円順列に記するプログラム( 十進BASIC ):