進法とは、数をのべきの和(各係数は)で表す記法のことです(は以上の整数)。 私たちが普段使う10進法はの場合で、個の記号(〜)を使い、各桁がの位を表しています。
1 表示の存在と一意性
進表示が必ず存在し、しかもただ一通りに定まることは、除法の原理(整数をで割ると商と余りがただ一組決まる、という事実)を繰り返し使うだけで分かります。数をで割って余りを最下位の桁として取り出し、商をまたで割って次の桁を取り出し……と続ければ、いつか商がになって表示が完成し、しかも各段階の商と余りが一意なので、表示全体も一意に決まります。
2 10進から2進への変換
「で割って余りを並べる」のが変換の基本操作です。を2進法で表してみましょう。
- 余り
- 余り
- 余り
- 余り
商がになったら終了です。余りを下の桁から順に並べるので、下から、つまり上から読むととなります。
逆に2進から10進への変換は、各桁に対応するべきを掛けて足すだけです。
3 コンピュータと2進・16進、そして小数の落とし穴
コンピュータの中身が2進法(オン・オフの2状態)で動いていることはよく知られていますが、2進の桁は長くなりすぎて人間には読みにくいため、4桁ずつまとめて 1桁にできる16進法(〜に加えて〜を使う)が、色コードやメモリアドレスの表記としてよく使われます。
小数にも同じ考え方を拡張できます。(10進)を2進法で表そうとすると
のように無限に循環してしまい、有限桁では正確に表せません。コンピュータがを何回も足しても厳密ににならない、といった浮動小数点の誤差の根本原因はここにあります。10進でがと循環するのと同じ現象が、底を変えると別の分数(この場合は)で起きているだけなのです。
閑話休題:もっとも経済的な底は3 コンピュータの底として2進法が使われていますが、「桁数」と「1桁あたりに必要な記号の種類」の積を最小にするという観点で見ると、実は最も無駄のない底は3だと言われています。ある数を底で表すのに必要な桁数はおおよそに反比例し、 1桁に必要な区別(記号の種類)はに比例するので、コスト(桁数 × 底、 radix economyと呼ばれる指標)を最小にするを求めると、答えは自然対数の底になります。整数でこれに一番近いのはなので、「もっとも経済的な整数の底は3進法」ということになるのです。
この理屈を本当に実装してしまった例があります。1958年、モスクワ大学で開発されたコンピュータ「セトゥン」(Setun)は、の3つの状態を使うバランス 3進法で動く実機でした。少数が製造され、教育機関などで使われた記録も残っています。それでも最終的に世界を制したのは2進法でした。理由は数学的な効率ではなく物理的な単純さです——電圧の「高い・低い」の2状態だけを安定して区別するスイッチ(トランジスタ)を作るほうが、3つ以上の状態を正確に区別する素子を大量生産するよりずっと簡単で壊れにくかったからです。理論上の最適解が、工学的な現実の前に譲歩した一例と言えるでしょう。