2進数と16進数

こんにちは、ひろです。

 

さて、前回、私のブログの記念すべき第一回目の記事は、なんと2進数のお話というなかなかに謎な滑り出しを見せましたが、果たして今回はどうなるのでしょうか。

 

残念ながら今回も2進数のお話です。

あと16進数も出てきます。

 

 

 

前回の記事を読み直して、「内容うっす!」と思わず素で叫んでしまったので、今回はもう少し詳しく2進数についてのお話をしたいと存じます。

今回の記事も、あんまり2進数とか普段触れない人が読むとちょっと面白いかもしれませんが、2進数についてよく知っている人なら当たり前の内容です。

では早速参りましょう。

 

 

まず、2進数で数をどう表記するのかについてお話していませんでしたので、そこから始めたいと思います。

2進数で、0はどう書くでしょう?

 

0

 

0は「0」の文字をそのまま使えるので、こうなります。簡単ですね。

では、1は?

 

1

 

これも「1」の文字をそのまま使って表記します。

問題は次です。「0」「1」のふたつの文字しか使えない二進数で、「2」はどうやって表現するのでしょうか?

簡単です。2桁にすればよいのです。

 

10

 

「え!?もう2桁になるの?」

はい、2進数では、2という小さな数を表現するときに、既に数字を二けたにしないとなりません。

 

これは非常に不便ですが、賢い人はこれを上手く表記する方法を考え出しました。

16進数です。

実は、2進数と16進数は相性がすごくいいです。

このことを証明するために、Web上で簡単にできる占い(http://uranai-renai.com/aisyo/aisyo2.php)で、二人の相性を占ってみました。

 

f:id:hiro_gomafu:20180201211242p:plain

 

マジで相性よくてビックリした当然の結果ですね。

 

 

 

・・・え?なんか画数にerrorとか出てるし納得できない?

OK、では具体的にどう相性がいいのかご説明いたしましょう。

まず、4桁の2進数を考えます。

 

0000 0001 0010 0011

0100 0101 0110 0111

1000 1001 1010 1011

1100 1101 1110 1111

 

16進数では、これら4桁の2進数をすべて1桁で表現できます。

これがどういうことかといいますと、2進数と16進数を相互に変換する時に、ものすごく便利なのです。

上の16個の2進数に、16進数を併記してみましょう。

 

0000/0 0001/1 0010/2 0011/3

0100/4 0101/5 0110/6 0111/7

1000/8 1001/9 1010/A 1011/B

1100/C 1101/D 1110/E 1111/F

 

この表があれば、2進数と16進数の変換が一瞬でできます。

例えば、次のようにクソ長い2進数があったとします。

 

1000101000101000101000001100100011001100000010000

 

このままではとても見づらいですし、ゼロやイチがいくつ連続して並んでいるのかなど、非常に紛らわしいですね。

これを16進数に変換してみましょう。

まず、下の位から、4桁ずつにこの16進数を区切ります。

 

1 0001 0100 0101 0001 0100 0001 1001 0001 1001 1000 0001 0000

 

あとは、先ほどの2進数と16進数の併記に従って、各4桁を16進数に機械的に変換するだけです。

 

1145141919810

 

非常に美しく、覚えやすくなりました。

16進数から10進数に戻すときも同様に、さきほどの表で機械的に戻すことができます。

 

もうお分かりですね、16進数は、2進数を人間が視認しやすい形に書き換えたものだったのです。

今までカラーコードなどで何となく16進数に触れていた人も、なぜ16という中途半端な数字なのか?という疑問がスッキリ解決できたのではないかと思います。

 

ちなみに、前回の記事の話でちょこっと出てきたポケモン個体値の話がありましたが、個体値が0~31なのも、2進数5桁で表現できるのが0~31までだからという理由に起因しています。

さらに言いますと、努力値の最大が255なのも、2進数8桁で表現できる最大値が255だからです。

初代のポケモンなどは、カセットに詰め込めるゼロとイチの量(桁数)がカッツカツだったので、個体値努力値に割り振る桁数を慎重に決めた結果、必然的にその最大値が決まったのですね。

同じように、多くのゲームでダメージのカンスト値などが「(2^n)-1」であることが多いのはその影響です。32767((2^15)-1)とか65535((2^16)-1)とか、ゲームをやり込んだ人なら見慣れた数字ではないでしょうか。

 

 

 

さて、前回に引き続き、2進数の話や、それを人間が分かりやすいように書き換えた16進数の話などをしましたが、いかがだったでしょうか。

次回は・・・うーん、もう2進数の話は流石にいいよね。

なんか別の話考えときます。

では。

 

俺は一体このブログで何がしたいんだろう