18.1.1 n進法

私たちは日常生活で 10 進法を用いて数を表しています.一般の n 進法の話に入る前に,まずは 10 進法について復習しておきましょう.

10 進法の特徴は

  • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 という数字を用いる
  • 9 より大きい数は 2 個以上の数字を並べて表し,位取りには 1 の位, 10 の位, 100 の位, … というように 10 の累乗を基準に用いる

という 2 点に集約されます.たとえば 10 進法で 54321 と書いたときは

54321 = 1*100 + 2 * 101 + 3 * 102 + 4 * 103 + 5 * 104

という意味に解釈しているわけです.

この 10 進法が上手くいっている理由は,当たり前ではありますが,全ての整数を 1 通りに書き表せる点にあります.そして 1 通りに書き表せることの本質的な理由は,「整数では,商と余りの計算ができる」という事実です.もう少し数学的に言うと,こうなります: 正の整数 n を 1 つ取ったとき,任意の整数 m は m = qn + r (q, r は整数, r=0, 1, …, n-1) という形に一意的に表せる (こういう性質を指して「有理整数環 Z は Euclid 整域である」といいます).たとえば 54321 の各位の数字は

  • 54321 = 5432 * 10 + 1
  • 5432 = 543 * 10 +2
  • 543 = 54 * 10 + 3
  • 54 = 5 * 10 + 4
  • 5 = 0 * 10 + 5

という風に,10 で割った商と余りを繰り返し計算することで求められます.つまり整数 m に対し,整数の列 qk, rk (k=0, 1, 2, …) を帰納的に

  • m = q0 * 10 + r0
  • qk-1 = qk * 10 + rk (k=1, 2, …)

という式で決めれば,rk が 10k の位を表す数になります.

いまの rk を計算する過程で用いたのは「10 が正の整数である」という事実だけであって,10 という数そのものに本質的な意味はありません.ですから 10 とは限らない正の整数 n を取ってきても,勝手な整数 m に対して

  • m = q0 * n + r0
  • qk-1 = qk * n + rk (k=1, 2, …)

によって qk, rk を計算することで, m を

m = r0 * n0 + r1 * n1 + r2 * n2 + … + rp * np

という形にただ 1 通りに書き表すことができます.このとき m = rprp-1…r1r0(n) と書き,右辺の表記法を n 進法といいます.たとえば 10 進法では 6 = 0 * 20 + 1 * 21 + 1 * 22 なので,2 進法では 6(10) = 110(2) と表す,といった具合です.

コンピュータが情報を扱う時は,常に情報を 0 と 1 の羅列として扱っています.ですからコンピュータを理解するときに最も大事なのは 2 進法になります.また 2 進法はコンピュータには分かっても人間には分かりづらいことがあるので,補助的に 16 進法や 8 進法を用いることがあります.次の節ではコンピュータに焦点を当てて,2 進法などの扱いをより詳しく調べましょう.