#11 Continuing story of elementary mathematics-1

 [公開]
icon Naoya Matsuzaki が 2018/06/16 1:32 に投稿 ( icon Naoya Matsuzaki が 2018/08/19 16:12 に編集 <更新履歴> )
  投稿を編集(サインイン)
  ストック
  アンケート回答

  目次

Continuing story of elementary mathematics-1

そもそも補数ってなんなのよ

基本情報でよく出てくる2の補数とか1の補数なんて単語がでてくるけど、そもそも補数というのは何なのか?
Wikipediaを見ると

補数(ほすう;complement)とは、ある基数法において、ある自然数 a に足したとき桁が1つ上がる(桁が1つ増える)数のうち最も小さい数をいう。
b 進法において、自然数 a を表現するのに必要な最小の桁数を n としたとき、

  • b n − a を 「b 進法における a に対する基数の補数(b の補数)」
  • b n − a − 1 を「b 進法における a に対する減基数の補数(b - 1 の補数)」

という。 → Wikipedia

と書いてある。
コンピュータで使っているのは2進数なので

  • n − a を 「2 進法における a に対する基数の補数(2 の補数)」
  • n − a − 1 を「2 進法における a に対する減基数の補数(2 - 1 の補数、即ち1の補数)

ということになる。これが10進数だったら

  • 10 n − a を 「10 進法における a に対する基数の補数(10 の補数)」
  • 10 n − a − 1 を「10 進法における a に対する減基数の補数(10 - 1 の補数、即ち9の補数)

になるわけ。2進数での補数は2の補数(基数の補数)と1の補数(減基数の補数)、10進数での補数は10の補数(基数の補数)と9の補数(減基数の補数)といった具合に各基数に対して2種類の補数があるそうな。

この補数を使うと引き算を足し算にできたり、負数を表現できたりとか、何か色々良いことがあるらしいが、どうも今一つピンとこない。試験の時に一生懸命暗記してもすぐ忘れてしまう。そもそも、キチンと理解していないのがいけない。
という訳で今回から数回に分けて補数(やそれにまつわる話)について掘り下げてみる。

補数についてもう少し考える

上の定義にあるように補数自体は基数(何進数、ということ)をいくつに選んでもよい、ということでしばらくは10進数で考えよう。あと、2種類の補数、基数の補数と減基数の補数があるがこれもしばらくは基数の補数(10進数なら10の補数、2進数なら2の補数)だけを考える。

では10進数での0~9の自然数の補数を調べてみる。上の定義から
  10 n − a
1桁だからnは1
  10 − a
  = 10 − a n − a


だから
a10の補数
10
......

まぁ、これは簡単。次、10進数での0~99の補数は
  10 n − a
2桁だからnは2
  10 − a
  = 100 − a
だから

a10の補数
100
99
98
......
92
91
1090
1189
1288
......
98
99

となる。ん・・・、0から9は1桁だから
  10 − a
で計算しなきゃいけないんじゃないの?
と、思ってしまうが違うんだな。補数の計算は最大桁数の設定が大事。補数の定義にあるnのことね。2桁で補数演算を行う、としたら1桁の値が出てきてもnを2として計算する。
これ大事。忘れないでね。

引き算を足し算にできるらしい

たとえばx-yを補数を使って足し算にする場合、基数をb、最大桁数をnとすると

  • xにyの補数を足す。
  • その結果からb nを引く

とする。
ここで最大桁数とは減数、または被減数のうち桁数の多いほうの桁数のこと。

10進数の場合、基数の補数の定義から桁数をnとしたときのyの補数は
  10 n - y
だからx - yを補数を使った足し算で表すと
  x + ( 10 n - y ) - 10 n
となる。整理すると
  x - y + 10 n - 10 n
  =x - y
となって確かに引き算を足し算で行っている。
でもなんか当たり前だよな。ちょっとがっかり。

今回はここまで。
次回はこの補数を使った演算をもう少し詳しく見てみよう。

 添付ファイル     - [0]


 コメント追加