2進数のはなし・その1

突然だが妹紅、今回からちゃんとした形で「情報処理技術者試験対策講座」を始めたいと思う。

ん?どういうこと?

つまりだな、今までのようにピンポイントで講義をするのではなく、基礎から一つ一つ講義をしていこうと思うんだ。どうだろうか。

おおー、なるほど。
うん、いいんじゃないかなあ。
要は、「この講義を全部理解できれば基本情報技術者試験や応用情報技術者試験にに合格できる!」ってコトでしょ?

う………まあ、そうなるように努力しよう。

だーいじょうぶだって、慧音なら!!
で、まずは何から始めるの?

う、うむ。
そうだな、まずは「2進数」から始めてみようか。

「2進数」?
なにそれ?

知っての通り、ここでターゲットにしている資格「基本情報技術者試験」と「応用情報技術者試験」は、情報処理技術者のための試験だ。
つまり、コンピュータを扱うことになる。

うんうん。

だが、コンピュータというのは少々厄介でな、我々が普段扱う数字を扱っていないんだ。

普段扱う数字、って?

例えば、我々は「0」〜「9」までの数字を扱う。
それに、「2+9」のような計算の場合、10になった時点で次の位へと桁上がりをする。
これは我々の世界では常識の範囲だな。

うん。小学生でも分かることだね。

ところが、だ。
コンピュータは 「0」と「1」しか扱わない のだ。

え………?「0」と「1」だけ?
じゃあ計算とかどうするの?
ってその前に、文字はどうなるの?

無論、文字も使えない。

え、ええーっ!!
だ、だってこの前コンピュータの実物を香霖堂の店主に見せて貰ったけど、ちゃんと文字とか表示されてたよ!?

確かにそうだな。
だが、それはあくまで「見ている」我々が理解しやすいように変換しているだけに過ぎない。
本来は全ての情報を「0」と「1」のみで扱っているんだ。

うーん………急に分からなくなってきたよ、慧音。

まあ、最初は仕方ないだろう。おいおい慣れていくさ。
さて、前振りが長くなったが、この「0」と「1」の2通りしか扱わないやり方のことを「2進数」と呼ぶんだ。
ちなみに、我々が使っている数字は、「0」〜「9」まで使うので、「10進数」と呼んでいるぞ。

へええ………ところで慧音、結局この「2進数」って、計算とかどうするの?

それは、これから学ぶとしよう。
さて、その前に、「2進数」を学ぶにあたって丁度良い人物がいる。
せっかくだから、彼女にも講義を手伝って貰うとしよう。
ちょっと待っていてくれ。

ん?誰だろう?

待たせたな、妹紅。
今回は特別ゲストとして、彼女に来ていただいたぞ。

どうも、八雲藍です。
数字のことなら式神の私に全部任せなさい。

なるほど、あんたか。
確かに幻想郷と外の世界の違いはあれど式神同士、話が合うかもしれないね。

さあ、それじゃあ藍殿、2進数についての説明をお願いする。

それでは、まずコンピュータが0と1しか使わない理由について説明しようかね。

ああ、ちゃんと理由があるのね。

無論だとも。そもそもコンピュータといえども元を辿ればただの電子回路に過ぎん。
「電流が回路を流れた」「流れていない」ということしか本来は理解できないものだ。

へえ。………なんか、最初はびっくりしたけど、急にコンピュータがたいしたことない気がしてきた。

確かに、コンピュータを侮るのは愚の骨頂ではあるが、かといって必要以上に怯える必要もない。
なに、理解さえすれば問題無い話だ。

うむ、藍殿の言うとおりだな。………さて、妹紅。
この「電流が回路を流れた」「流れていない」という情報、何か気にならないか?

えっ?
「電流が回路を流れた」「流れていない」・・・?
えっと………ひょっとしてこれが「0」と「1」に対応するの?

その通り。
詳細は省くが、これがコンピュータが0と1しか使わない理由であり、そして2進数を扱わなければならない理由だ。

ふうん。とりあえず2進数が大事ってことは分かったよ。
じゃあ、実際に計算はどうするのさ?

ふむ、計算方法だな。なに、さほど難しくはない。
我々が普段使っている「10進数」の 「2〜9」を使わないだけだ。

いやいやいや!!
それだけじゃ難しいってば!!

そうかな?よく考えてみるといい。
「10進数」は「10」になると繰り上がる。
つまり「9」の次は「10」になる。当然、 桁も増える。

………え?うん。
そんなの当たり前じゃない。

ということは、だ。「2進数」であれば、「2」になると繰り上がる。
つまり、 「桁が増える」 のだ。
さあ、この、10進数の「2」を、2進数ではどう表示する?

う、うーん………「桁が増える」から………まさか 「10」

うむ、正解だ!
「2進数」「10進数」と分けたところで「決まった数までいけば桁が増える」という性質は変わらない。
そう考えると、たいした物でもないだろう。

う、うん………でも、あれ?
2進数の「10」と、10進数の「10」は、形が一緒になるけどどうやって見分けるの?

うむ、いい質問だ。
通常、2進数を使う場合は敢えて「10(2)」という書き方をする。
こうして括弧を付けることでわかりやすいようにするのだよ。

へぇー、なるほど考えられてるのねー。

ありがとう、藍殿。
さて妹紅、2進数の表現がめでたく分かったところで、次は「20」を2進数で表現してもらおうかな。
30秒以内 で、だ。はいスタート。

え。え。えええっ!?
いやいや、30秒以内でなんて、ええぇーっ!?

ほらほら、もう10秒経ったぞー。

だぁーっ!!
え、えーと、1の、2………じゃなくて「10」の、えーと、「11」………?
えと、「11」の次は「12」………違う違う、「21」………じゃないって!!
「100」………でしょ、えーと………あれ、いまいくつ数えたっけ?

はい、ストップ。

のわーーっ!!
む、無理だって!!考えてみたら、10進数よりも桁上がりの回数が滅茶苦茶多いじゃない!!
こんなのいちいち数えてられないよッ!!

私ならすぐに数えられるがな。
ちなみに答えは「10100」だ。

そりゃあんたは計算強いからいいけど!
ていうか答えだけ言われても正解かどうかの確認もできないしっ!!

ははは、悪い悪い。
まあ、さすがに藍殿みたいにすぐは出来ないかもしれないが、ちゃんと計算する方法はある。
もちろん、妹紅みたいに1つずつ増やすのではない方法で、だ。

うぅ〜、早く教えてよ慧音。

では、早速やっていこう。
10進数の数字を2進数に変える簡単な方法とは・・・ずばり 「2で割る」 ことだ。

2で………割る?

そうだ。では試しに妹紅、「20」を2で割ってくれ。

う、うん。20÷2だから…10だね。

うむ、まあこれぐらいは大丈夫だろう。さて妹紅よ、このときの余りはいくつだ?

余り?10で割り切れてるから、 「0」 だね。

そうだな。では次に、割った答えである「10」をさらに2で割ってくれ。

え?まだやるの?10÷2は5。余りは 「0」 だよ。
………まさか慧音、まだ2で割るの?

察しが良いな、妹紅。さあ、続けていこう。

しょうがないなー。あれ、5÷2は2.5だけど?

ああ、そこは余りを出す形で計算してくれ。

ふーん、余りに何かあるのかしら。
じゃあ改めて、5÷2は2で余りは 「1」

では次だ。

どこまでやるの………。
次は2÷2で1。余りは 「0」

よし、最後だ。

やっと終わりかあ。
えーと、1÷2は0。余りは 「1」

お疲れ様、妹紅。
さて、今の計算で出した 「余り」 を整理してみようか。

え、「余り」?「答え」じゃなくて?

そうだ、注目するのは「余り」だ。
さて、20を2で割っていった結果、余りはそれぞれ
「0」「0」「1」「0」「1」 となった。
さあ妹紅、この数字の並び、何かに似てないか?

え?何って、ただの0と1の並び………あッ!!
これ、逆から読むと、 「10100」 ………さっきあの式神が 「20を2進数で表した答え」 と一緒だ!

ほう、気づいたか。
まさにその通り、実は10進数の数字を2進数で表現するときは、
「10進数の数字を2で割った答えが0になるまで割り続け、その余りを逆から並べた形」 が正解となるのだ。

す、すっごい………けど、なんで?
単に2で割るだけでどうしてこうなるの?

ふふふ、驚くことはない。
我々は普段から10進数で同じようなことをしているのだよ。
ただ、当たり前すぎて意識することはほとんどないだけだ。

え?うっそお。

嘘ではないぞ。
………さて、ということで今回は「2進数編」をお送りしているが、
1回で終わる予定だったのだがちょっと予定をオーバーしそうなので、この辺で一旦区切るとするか。

えっ゛゛!!
次回までこのもやもや感が続くのーっ!?

はは、少しの辛抱だ。………たぶん。
読者の方々も、ぜひその仕組みを考えて欲しい。
もっとも、勤勉な人は既にGoogleで調べているだろうがな。
では、また。

<次回:2進数のはなし・その2>


<あとがき>
新規一転基礎から、ということで2進数から。
「2進数を制するものは情報処理を制する」とまでは言わないけど、
0と1の並びに慣れておかないといけないのは確か。
さて、次回は「2の補数」とか「小数の2進数表現」とかやる予定。
あ、「こんな講座やってほしい!」とかあれば勿論大歓迎ですよっと。

本ページにて扱っている画像は以下サイトから拝借しております。
こんなんでいいんすか
慧音先生の情報処理技術者試験の対策講座へ戻る。
戻る。