2進数のはなし・その2

さて、今回は「2進数について」の第2回。つまり後半戦だな。
前回に引き続き、八雲藍殿にゲストに来ていただいているぞ。

どうも。さて、前回のまとめだが、要点をまとめると、「なぜ2進数を学ぶのか」「2進数とはどんな数か」「2進数での表現方法」「10進数から2進数への変換」について学んだ訳だな。

そういえば、一度にそれだけやったのね。
疲れるわけだわ。
………で、10進数の「20」が2進数では「10100」になる、って話になったんだっけ。

その通り。そのコツは
「10進数の数字を2で割った答えが0になるまで割り続け、その余りを逆から並べること」
だということだったな。

そう、そこが分からなかったのよねえ。
確かにあの後、2進数で1個ずつ足していったら、ちゃんと20のところで「10100」になったんだけどなあ………納得いかない。

それでは、種明かしをそろそろしようかな。
さて、ここに「495」という数がある。これを10で割ってみようか。
もちろん、余りを付けて、だ。

え、2進数じゃなくていいの?それなら簡単だけど………。
えーと、「495÷10」は………49。で、余りは「5」だね。

ふふふ………その「5」だが、先ほどの「495」の「1の位」と同じだな。

え………あっ………!!

気づいたかな。では、次に「49」を10で割ってみよう。
49÷10=4。余りは………「9」だ。

おお………おおおー………

さあて、最後は「4」を10で割って………と、もう分かったかな。
10で割った余りを下位桁から並べれば、元の「495」になるんだ。
こんな風に、どんな数字で割ったとしても、その余りを下位桁から並べれば「○進数」の数字になるんだ。

なーるほどっ!これはスゴイねっ!!
よーし、これなら2進数なんてちょちょいのちょい、ね!

ほほう。大きく出たな。
では、「-10」を変換してみようか。

えっ?ら、藍殿、いきなりそれは………

まっかせなさい!!「-10」なんてちょちょいの………あ、あれ?

(ニヤニヤ)どうした、藤原の。

「-10」………マイナス10………「マイナス」?

………やれやれ。安請け合いをしてはいけないぞ、妹紅。
お前はまだ2進数の「負数」の表現を理解していないだろう。

え………負数………って?

その名の通り、「負の数」………つまりマイナスのことだ。
コンピュータは「0」と「1」しか扱えないため、
2進数は10進数と違い「+」「−」などの符号を付ける場所が存在しない。

ちょ、ちょっと!
それじゃ2進数は「正の数」しか表現できないってこと!?

いやいや、そうではない。
さすがにコンピュータもそれでは困る。
何しろ、あらゆる表現を「0」と「1」だけでこなそうというのだ。
「−」ぐらい表現できなくてどうする。

いや、「−」ぐらい………って言われてもなあ。
どうやって表現するのよ、そんなの。

ふふふ、簡単ではないか。「0」と「1」しか表現できないのだから、それで「マイナス」を表すしかなかろう。
つまり………「0」ならプラス、「1」ならマイナス、という風にな。

おおっ、なるほど。
………って、「1」ならマイナスって言われても、「1」は2進数で10進数を表現するときに使ってるじゃない。
たとえば「10100」なんて、1が2カ所もあるんだけどどうするの?

うむ、良い目の付け所だ。もちろん、単に「1」であれば「マイナス」というわけではない。
ある「特定の箇所」が「1」であればマイナスと考えるのだ。

特定の箇所………?

それを説明するために、まずは「コンピュータでの表現の限界」を説明しなければならないな。

え?限界?どういうこと?

コンピュータといえども、表現できる数には限界がある、ということだな。
ちなみに2進数の1つの桁を「ビット」という呼び方をするのだが、
たとえば「このコンピュータは8ビットしか表現できません」「16ビットしか表現できません」というような制約が存在するわけだ。

8ビットってことは、8桁か。ってことは「11111111」………「255」までしか数えられない、ってこと?

察しが良くて助かる。ところで藤原の、今の「11111111」に「1」を足したらどうなると思う?

「1」を?「11111111」+「1」は、「100000000」になる………んだけど、
さっきの「8ビットしか表現できない」ということを考えると、この値は表現できない、ってことになるの?

お見事。この場合は、下位8ビットが残される。つまり先頭の「1」は削られてしまうわけだ。

なるほど、下位桁しか残らない、と。
………ってことは、これは結局「0」になっちゃうってことなの?

うむ。面白いだろう?
さて、話を戻そう。このようにコンピュータは表現の限界がある。
そして今回の場合、この8ビットを使って「マイナス」も表さなければならない。

マイナスも?それって無理じゃない?
だって、もう「0」〜「255」までの数字が使われることになってるじゃない。

そう。普通に考えたら無理だ。そこで考えを変える。
「一番最上位の桁を、符号代わりに使ったらどうか?」と。

最上位の桁を符号に………。
そこで、「0」ならプラスに、「1」ならマイナスにするってことなの?

ふふふ、その通り。さて、ということでここからは「補数」の説明をしたいと思う。

補数?なにそれ。

簡単に言ってしまえば「マイナスの数をプラスの形で表す」表現方法だ。
ちゃんとした定義では「足すことによって桁上がりをする値」になる。

足すことによって桁上がり………ねえ。
つまり、「2」の補数は「8」ってことでいいの?

そうそう、それでいい。
しかしそれは10進数の場合だな。
10進数は普段から使っているから簡単に考えられるが、2進数はどうかな?
たとえば「01001011」(=75)の補数を考えてみようか。

に、2進数の場合っ?
え、えーと、桁上がりだから………ん、待てよ、元の数が75だから、補数は25………?
ええい、きっとこうだ!「00011001」でどうっ?

ふむ、10進数ならばそれで当たりだが、肝心なことを忘れてはいけないな。
10進数と2進数では「桁上がりの仕方が違う」という基本的なことを。
10進数では0に10加えれば桁上がりするが、2進数ではその間に何回桁上がりすると思っている?

あ、ああっ、しまったあ!!

………とはいえ、考えなしにやったことではないのでよしとしよう。
実は2進数の補数を求めるためには、ちゃんとした手順が確立されている。
それを紹介しておこうか。

むー………そっちを早く教えてくれればいいのに。

そう言うな。物事には順序がある。
さて、2進数の補数を求める方法だが………2進数において、「1を足すことによって桁上がりをする」ための条件とは、何だ?

2進数での桁上がり?
そりゃ、次の桁に行くわけだから、「全て1」の状態じゃない?「11111111」とか。

ご名答。
ということは、だ。元々ある数に何かを足して「全て1」の状態になれば、そこにまた1を足して桁上がりをすることになるな。

ふんふん、その通りだね。
………あれ、あれれ………ちょ、ちょっと待って!
ということは………これ、元の数の「0」のところが「1」になって、「1」のところが「0」になっている数を足せば、全部「1」になるんじゃないの!?

むむっ、そこまで気づいてしまったか、お見事だ。
その通り、「01001011」に対しては、「1」と「0」を反転した数である「10110100」を足せば、「11111111」になる。
そして、それに「1」を足せば………見事、桁上がりとなる。
つまり、「10110100」に「1」を足した「10110101」が「補数」となるのだ。

おおっ、やったあ!予想通り!
さあて、これで2進数の負数なんて楽勝………って、あれ?
ねえ、この「補数」って、2進数のマイナスとなんか関係あるの?
これって単に「足して0になる数」を求めただけじゃん。

何を言うか、大いに関係があるぞ。
この「補数」が無ければ負数の計算が出来ないのだから。
それに藤原の、お主が「足して0になる数」と言ったが、それこそが重要なポイントなのだ。

え、そんなに重要なの?
ホントに、慧音?

ああ、本当だとも。
………さて、尺がそろそろ尽きてきたようだな。
予想外に長くなってしまったが、2進数はこれから情報処理を学ぶ上で基本となる部分だ。
長くなって悪いことはないだろう。

ま、またいいところで次に繋げちゃうのぉ………?

ま、まあまあ。
………しかし今回はゲストの藍殿に大分任せてしまった部分があるな。
次回は私もしっかり役目を果たすこととしよう。

いやなに、これぐらいおやすいご用だ。
紫様の面倒を見ることに比べればこれぐらいなんてことは………と、うわぁっ!
(突如現れたスキマに飲み込まれる)

あっ

あっ

(ゆ、紫様ッ!?い、いやさっきのはつい口が滑ったというか本音が出たというか、ああいや、その、あぁっごめんなさいごめんなさいっ!!)

えーと………慧音?

そ、それではまた次回をお楽しみになっ!!

その「無かったこと」にするのは、ちょっと強引すぎじゃないかなあ………

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


<あとがき> あれえ2進数は2回で終わるかと思ったけどなんかまだ続くわ。
まあここでつまづかれるとこの先厳しいからしっかりやるけど。
補数は自分が学生時代には「こんなもんなんだなあ」って機械的に覚えてたけど、ちゃんと理屈が分かると「補数すげえ」ってなる。
次回はその「補数すげえ」って秘密に迫る予定。あと2進数の小数についても。


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