小説『緑ヶ丘高校電算部ゲーム製作記』
作者:芳野()

しおりをはさむ/はずす ここまでで読み終える << 前のページへ 次のページへ >>

第十六話 2進数と16進数


「今日はね、基本に戻った話をしたいの」
 立花先輩は言った。
 俺と西原さんは怪訝な表情を浮かべる。
「基本、ですか?」
「そ。コンピューターの基本中の基本。2進数と16進数についてよ」
「なんでまた、そんな話を?」
 そう俺が尋ねると、先輩はふふん、と鼻で笑った。
「イツキくん、不審そうね。ゲーム作りと何の関係があるかーって顔してる。でも、これから話す内容は、プログラミングにとって、もっとも重要な話なの。ちゃんと聞いてよ?」
 俺と西原さんは頷いた。
 ま、先輩がそこまで言うなら、聞こうか。

「じゃあね、イツキくん。進数って聞いたことある?」
「ないですよ」俺は即答した。
「うー、ま、集合論なんてイツキくん知ってるとは思わないけど」
「俺に数学ネタ振るなんて、無駄なことさ」
「……そんな開き直って言わないでよ。ま、いいわ。じゃ、軽く説明すると、一桁上がるまでの数のことよ。10進数なら、9の上が10になって、二桁になるでしょ? そして99の次は100になって三桁になると」
「ああ、はい」
「人間はほとんど10進数を使うわね。一説には人間の両手の指の数が十本だから数えるのに便利だったからって言うけど、ま、それは置いといて。でも、他にもいろんな進数があるのよ。たとえば、時間だと60進数。59秒の次は1分00秒になるし、59分の次は、1時間00分00秒」
 なんとなく、俺は先輩が言いたいことがわかってきた。
「一年は12月分あるから、12進数。これは、0じゃなく1月から数えるから、12月の次は翌年の1月ね」
「あ、はい」
「じゃあ、2進数の場合は? 西原さん」
 指差された西原さんが、少し考えてから言った。
「そうですねぇ。1の次が、10になる……でいいですよね?」
「正解」先輩は頷いた。「その次は11になって、その次は100になる、その次が101って感じ」
「すぐに桁が上がりますね、そうなると」
「実は、コンピューターが理解できるのは、この2進数だけなの。LSIのチップに電気を通すか通さないか、ONかOFFかで測るからなんだけど。でも、人間だとこれだとわかりにくすぎるでしょ? 10011011なんて言われても、即座になんの数なのかわからない」
 うーむ、何だろうな。
「だから、人間にもわかりやすくする為に──その為だけに──16進数が使われるようになったわけ」
「10進数の方がわかりやすくないかなぁ」
 俺は言った。
「でも、それだと、正確に2の倍数にならないから、2進数を上手く表せないのよ。ま、言いたいことはわかるけど。で、16進数だと、9の次はAになって、Aの次はB……Fの次に、桁が上がって10になるわけ。ABCDEFが9の上に並ぶわけね」
「Fは15か」
「その上は16で桁上がり。16進数だと10ね。ちなみにね、さっきの2進数の数を16進数で表すと、9Bね。9を2進数にすると、1001になるし、B(11)を2進数にすると、1011。上4桁と下4桁を合わせたら、9Bってなるの」
「すげえ。暗算してる……」
 俺は驚嘆の声をあげた。なんなんだ、この人は。

「実は、簡単に計算する方法があるのよー。2進数をよく見てみて。一番右の桁が1だったら、10進数でも、1でしょ?」
「そうですねー」と西原さん。
「そして右から二番目の桁が1だったら、0、1、の次だから、2。三番目の桁が1だったら、0、1、10(2)、11(3)の次だから、4……法則性がわかってこない?」
 えっ?
 だから、俺は数学は無理だって。
 でも、考えてみる俺。

 1の次は、2……2の次は4……。

「なら、4の次は8……かな?」
「ふふっ。正解。0、1、10(2)、11(3)、100(4)、101(5)、110(6)、111(7)、1000(8)。ほらね。桁がそのまま、2の倍数になっているの」
「なるほど」
「で、さっきの9Bの話にもどるけど、まず上四桁の9のほうは、1001だったよね。これの一番左の桁、右からは4桁目は1、2、4、8って右から順に桁を数えていったら8になると。それに、一番右の桁の1──これは10進数でも1だよね──を足したら、9になる。(1 x 8) + (0 x 4) + (0 x 2) + (1 x 1) = ほら、9でしょ?」
「あ、そういうことか」
「じゃ、イツキくんも、計算してみて。1011がなんでBになるか」
「えーと、1が8で次は0、そして1が2で右端も1。合計すると、(1 x 8) + (0 x 4) + (1 x 2) + (1 x 1) = 11。でもこれは10進数だから、16進数にしたら、9の次はA(10)で、その次はB(11)。だから……B?」
「正解ー。イツキくんも、これでバッチリだよね!」
「おぉっ」
 ちょっと感動。

「って、実はWindowsに付いてる電卓使えば、一発で変換できるのよ」
「なぬっ」
 そういうのがあれば、先に言ってよ、先輩!
「ちょっと立ち上げてみるよ」先輩は、電卓アプリを立ち上げた。「このメニューの表示(V)のタブの中から、プログラマ(P)を選んだら、10、2、16進数変換の電卓が出てくるの」
 先輩がボタンを押したら、画面に確かに16進、10進、8進、2進のタブのある電卓が表示された。
「で、まず16進数タブになってるのを確認してから、9Bを打ち込むでしょ。それからタブを2進数に切り替えたら──」

 画面に、10011011が表示された。

「これでラクラクよねっ。でも、自分で計算できるようにしておいた方が、あとあと便利よ。プログラムの世界じゃ、2進数で考えないといけない事って、結構たくさんあるからねー」

「ああ、なんか少し頭良くなった気がする」
「良かったねぇ。じゃ、最後に少し付け足し。コンピューターの世界じゃ、2進数は最後にbの文字を足して表すことが多いの。で、16進数の時はh」
「そうなのですか?」
「だって、10って表示されても、それが10進数の10なのか、2進数の2のなのか、16進数の16なのかわからないでしょ? でも、もし10bだと、あ、これは2進数の2なんだな、ってわかるし、10hだと、16進数の16のことだとわかるわけ」
「なるほど」
「ちなみに、bはbinary decimal(バイナリデシマル)、2進数の略で、hはhexa decimal(ヘキサデシマル)、16進数の略だけど、これは覚える必要ないからね」
 先輩は、電卓アプリを閉じると、うーんと伸びをする。

「じゃ、コンピューターの単位がわかった所で、次は、それで測られるモノ、メモリーについてよ」

 先輩の講義は、さらに続く……。

-17-
Copyright ©芳野 All Rights Reserved 
<< 前のページへ 次のページへ >> ここまでで読み終える