19.1.3 n進数表現の変換

ある数が与えられたとして,それを n進数表現に変換するには, どうしたら良いでしょうか? m桁のn進数 「Am-1Am-2 … A1A0(n)」は, 次のような意味を持ちます.

Am-1Am-2 … A1A0(n) = Am-1nm-1 + Am-2nm-2 + … + A1n + A0

したがって, 与えられた数をnで割った際の余り(剰余)を繰り返し求めることによって, 次のようにn進数表現が(下位から上位へと)求められます.

(Am-1nm-1+…+A1×n+A0)÷n = (Am-1nm-2+…+A1) … A0

(Am-1nm-2+…+A1)÷n= (Am-1nm-3+…+A2) … A1

(Am-1n+Am-2)÷n = Am-1… Am-2

(Am-1)÷n = 0 … Am-1

たとえば,25(10) の 2進数表現は,

25 ÷ 2 = 12 … 1
12 ÷ 2 = 6 … 0
6 ÷ 2 = 3 … 0
3 ÷ 2 = 1 … 1
1 ÷ 2 = 0 … 1

という計算から, 25(10) = 11001(2) であることが分かります. また,25(10) の 8進数表現は,

25 ÷ 8 = 3 … 1
3 ÷ 8 = 0 … 3

ですから,25(10) = 31(8) となります.

また一般に10進の小数は,有限桁の2進数として表現できません. たとえば,10進数の「0.2(10)」を2進数で表現しようとすると,

0.2(10) = 2-3 + 2-4 + 2-7 + 2-8 + … = 0.00110011…(2)

というように循環小数となってしまいます. これは10進数で「1/3」や「1/7」が循環小数になるのと同様です.