2進数は,情報科学/工学の基礎に必ず出てきて,読者を悩ませる.そもそも,これが数の表記法の問題であることの理解が難しいようだ.しかも,2進数の 1 と 10進数の 1 は,同じ“1”という数字を使うからややこしくなる.数と数字が直感的に結びついているので,2進数の“11”がどうしても 3 には見えない.ましてや,2進表記を 10進表記に変換する方法,あるいはその逆,は覚えていても,何故その計算で変換ができるのか,説明できる人は余りいないのではなかろうか.
2進数を 10進数にするには,通常,各桁を 10進表記に直して足しあげるという計算をする.
1101
= 1*1011 + 1*1010 + 0*101 + 1*100
2進数
(1)
= 1*23 + 1*22 + 0*21 + 1*20
10進数
(2)
= 1*8 + 1*4 + 0*2 + 1*1
10進数
(3)
= 8 + 4 + 0 + 1
10進数
(4)
= 13
10進数
(5)
という計算である.この内,(1)式の存在を殆ど認識していない人が多いように思える.(1) の左辺は,算用数字の表記法で,「桁」を使って大きな数を表している.桁を繰り上げるときの単位が「底」で,これを 10 としたのが 10進法である.例えば,(5)式の“13”は,
13
= 1*101 + 3*100
10進数
(6)
という数を表している.
ついでながら,漢数字では,“十三”であって,十という数を,一から九の他に設けており,桁の概念はない.もっとも,漢数字にも,(6) 式の掛け算に相当するものはある.即ち,“百二十三”などの“二十”の部分である.漢数字は,大きな単位から小さな単位の順に並べるが,それが逆転しているところ(“二十”)は,積を表している.つまり,漢数字では,桁ではなく,その桁を表す漢字を用意しているのである.
底の変換に話を戻すと,(1) と (2) が同じ数を表していることを理解することが肝心である.これが分かれば,10進数の“13”の 2進数表記を求める次のような計算も容易に理解できるはずである.
13
= 1*101 + 3*100
10進数
(6)
= 1*10101 + 11*10100
2進数
(7)
= 1*1010 + 11*1
2進数
(8)
= 1010 + 11
2進数
(9)
= 1101
2進数
(10)
2進表記から 10進表記への変換の手順と全く同じである.ただし,この場合は,各桁の数字 0〜9 に対応する 2進表記を覚えていなければならない.桁が多くなった場合の指数も同様である(兆なら 12 の 2進表記が必要である).2進表記から 10進表記への変換でこのような面倒がないのは,底が大きくなる方向への変換だからである.つまり,2進数の格桁には,0 と 1 しかなく,これはそのまま 10進表記になっているのである.この 2進表記から 10進表記への暗黙の変換を意識に載せないと,この計算は理解できない.
*
数を表記する場合,算用数字の桁の考え方から自然に現れる方法に,数を繰り返し底で割り算して,その余りを逆順に並べる,というのがある.
13/2
= 6 … 1
10進数
(11)
6/2
= 3 … 0
10進数
(12)
3/2
= 1 … 1
10進数
(13)
1/2
= 0 … 1
10進数
(14)
余りを逆に並べて 1101
2進数
(15)
10進数を,その底である 10 で割っていけば,各桁の数字が余りとなって現れる,という何の変哲もない計算の応用である.
13/10
= 1 … 3
10進数
(16)
1/10
= 0 … 1
10進数
(17)
余りを逆に並べて 13
10進数
(18)
この計算を 2進数に適用するのだが,実際の計算は 10進数で行う点だけが,違う.同様に,2進数を 10進表記で表すのに応用することもできる.
1101/1010
= 1 … 11
2進数
(19)
1/1010
= 0 … 1
2進数
(20)
余りを 10進表記で,逆に並べて 13
10進数
(21)
この場合,除数 10 が 2進表記で 4桁になるのが煩わしく,各余りも改めて 10進表記にしなければならない.10進数を 2進表記で表すときは,除数 2 は底 10 よりも小さい.従って,割り算は易しく,余りは一桁,且つ除数 2 よりも小さい.つまり,そのまま返還後の表記である 2進表記に使えるのである.この点を理解しないと,この種の計算法は,容易に記憶から消えてしまうだろう.
*
2進表記と 10進表記の変換が,変換の向きによって,何故計算法が違うのか.学生から,このような疑問が出ないとしたら,その授業は失敗であった,と考えるべきである.