Rubyと仲良くなりたい٩( 'ω' )و

Rubyと仲良くなりたい日々のこと

16進数怖くないという話

「0xAが10」とかの表記をどう受け止めたらいいのかわからなかったので整理しました。

コード上での表現

プログラミング上で、これはx進数ということを示すために、数字の前に接頭語をつけて表現します。 下記の表はそれぞれに対応する接頭語です。

2進数 8進数 10進数 16進数
0b 0または0o 0d 0x

2進数の場合

例えば、0b1011の場合、"0b"が2進数であるということを表現していて、"1011"が2進数の数字となります。
1011は10進数に変換すると、11となるので、Rubyで実行すると、こうなります。

0b1011
=> 11

つまり、2進数の場合は単純に"0b"に続く数値を10進数に変換すればどんな数値なのか理解することができます。

16進数の場合

16進数の場合、"0x"が16進数であるということを表現していて、"A"などのアルファベットが登場するのでわかりづらかったです。
16進数に登場するアルファベット、これはローマ数字では表現しきれない数値を表現しています。

例えば、2進数の場合、下記の対応図のように、2になる時に桁を繰り上げることができます。

10進数 2進数
1 01
2 10
3 11
4 100

ところが、16進数の場合、下記の対応図のように、16になる時に桁を繰り上げようとしたら、10進数の10〜16にあたる箇所を表現できません。

10進数 16進数
1 01
2 02
... ...
9 09
... ...
16 10

そこで、下記のようにその表現しきれない数値をローマ字で表現しているのです。

10進数 16進数
10 A
11 B
12 C
13 D
14 E
15 F
16 10

実際にコマンドを打ってみると16進数の末尾の数字は、0123456789ABCDEF0123456789ABCDEF....と繰り返されていることがわかります。

まとめ

Rubyに限った話ではないので、対応表や考え方も、結構ネット上にあって自分の理解しやすいものをみつけることもできる!最初は戸惑いましたが、落ち着いて考えれば16進数怖くないはず!というお話でした。