1月1日 こうしろうの基本情報技術者試験に向けた勉強はいきなり元旦から始まった。中学に入ってから少しずつ勉強してきた成果を確認するために,『基本情報技術者実戦問題』で基数変換の問題を解いてみる。

 基数変換とは10進数を2進数に,16進数を2進数に,2進数を8進数に…と基数(ベースとなる数)を変換する計算である。Windows PCやMac上でアプリケーション・ソフト利用する分には2進数や16進数について考えることはないのであるが,情報処理の勉強はまず2進数から始まる。

 コンピュータはご存知のようにデジタル信号を扱う機械である。電圧がかかっている状態がON,電圧がかかっていない状態がOFFである。ON,OFFの信号の羅列をコンピュータはデータとして処理する。このON,OFFという信号を数値で表すのには2で桁上がりする,0と1の2値しか持たない2進数が適しているのである。例えば,25という10進数はコンピュータ内部では11001という2進数として扱われる。

 では16進数や8進数は何のために必要なのか。16進は16で,8進は8で桁上がりする数値であり,16進数の場合,1,2,3,4,5,6,7,8,9の後は英字を用いてA(10),B(11),C(12),D(13),E(14),F(15)と表す。10進の16が16進では10になる。2進数は2で桁上がりするので,大きな数値を表すとながーくなってしまう。そんなに大きくない205(10進)でさえ,11001101(2進)となってしまう。16進や8進数を使うと2進数を簡潔に表現できるのである。16進数では,1文字で15(F)までの値を表現できる。2進数4桁で表現できる最大値は1111(10進の15)なので,2進数4桁を16進数1桁で表現できるわけだ。MS-DOSの時代には,バイナリファイルを16進ダンプで読んだりした方も多いだろう。8進数では同様に111(10進の7)まで1文字で表すことができるので,2進3桁が8進1桁に対応する。

 人間に一番わかりやすいのが10進数で,コンピュータにわかりやすいのが2進数,その中間が16進数と8進数ということになる。(うーん,MindStorms日記始まって以来の読みづらい日記になってしまった。)

 さて,こうしろうはどうなったか? 問題集にとり組んで,しばらくすると「うーん」という唸り声が聞こえてきた。これは良いサインである。途中までは,順調に行ったということである。最初から「うーん」だったり,終始無言であったりするとヤバイ。

 10進→2進,2進→10進,10→16進,16進→10進までは,うまく出来ていた。16進→2進,2進数の小数点以下の数値を10進に変換するところで,つまづいた。正解率約7割,脈があると言えなくもないが,前途の多難さを感じさせる結果であった。

 今回,こうしろうが学んだ内容をまとめておきます。
A.10進数を2進数に変換する方法
 25(10進)を2進数に変換する。
 
 2で割った余りと商が答えとなる。25(10) = 11001(2)
 10進数を16進数(8進)に変換する場合も,16(8)で割り,余りと商を取っていく。

B.2進数を10進数に変換する方法
 2進数に限らずX進数から10進数への変換は各桁にウェイトを掛け求める。
 1101(2進)を10進数にする計算式は
 1 × 2の3乗 + 1 × 2の2乗 + 0 × 2の1乗 + 1 × 2の0乗
 = 8 + 4 + 0 + 1 = 13 となる。
nの0乗が,常に1になることを覚えておかなくてはならない。わたしゃ,なぜそうなるのかいまだに納得がいかないのであるが,2の0乗も,8の0乗も16の0乗も全て1となる。16進の16を10進に変換すると,
 1 × 16の1乗+ 6 × 16の0乗 = 16 + 6 = 22となる。

さて,このべき乗であるが,2のn乗なら倍にすればいいだけだから2,4,8,16,32,64,128と簡単に求めることができるのだが,8のべき乗,16のべき乗となるとどうだろう。8の2乗は64,3乗は,4乗は? 暗算で,すぐ求めるのは困難だ。情報処理技術者試験では電卓の使用は認められているが,いちいち電卓を叩いたりすると時間がもったいないので,節をつけて鼻歌のように覚えてしまっておくのが良い。64,512,4096…と歌って覚えてしまおう。

 実はこうしろう,このべき乗が苦手である。中学の数学で習っているにも関わらず8の2乗をついつい8×2と計算してしまう。「8の2乗は8×8だぞ!こうしろう」

C.16進数を2進数に変換する方法
 16進数や8進数を2進数に変換する時は変換表を使う(頭に入れておく)。
 16進1桁は2進4桁に対応し,8進1桁は2進3桁に対応する。
 
 例えば,E3(16進)はEの2進表記1110と3の2進0011をならべれば良い。
 E3(16) = 11100011(2)であり,10進では227になる。

D.2進数の小数点以下の数を10進数に変換する方法
 これは,2進数の0.1が1 × 2の-1乗であり,2の-1乗は0.5であることを頭に入れておけば,迷うことはない。2進数と10進数の変換表を小数点以下の数も含めてまとめると次にようになる。