補数とは、ある自然数に加えたときに1桁以上増す数のうち最も小さい数のことです。
したがって、2進数 11 の補数は 1 で、2進数 10 の補数は 10 になります。
10進数の自然数で考えます。 a > b とします。 a は n 桁の数とします。
c = a + b = 10 n となるとき、 c を a についてのアウフヘーベン数ということにしましょう。
a についての補数 b を求めるには アウフヘーベン数 c から a を引けばよいです。
a と b の桁数が同じときには、a についての補数は b であり、b についての補数は a ですが、a と b の桁数が異なるときには、a についての補数は b であるので b についての補数は a であるとするのは間違いになります。
a と b の桁数が同じ n 桁のとき、「 a と b は アウフヘーベン数 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 ):
数理論 へ戻る