プログラミング言語では16進数は当たり前のように使用しますが、なぜ16進数なのか?についてはあまり触れられていません。
またコンピュータの中核である2進数と16進数は相性が良いと言われても、学習を始めたばかりの方にとっては意味が解らないでしょう。
そこで今回はこの「Java 16進数」について色々と知識を付けるべく解説してみたいと思います。
2進数と16進数がなぜ相性が良いのか?またなぜ16進数を使用するのか?など初心者の方が最も知りたい部分について詳しく説明していこうと思いますので、最後まで読んでみてください。
進数とは
まず初めにこれを理解していないと始まらないと思いますので、それぞれの進数について説明をしたいと思います。
進数には「2進数」「8進数」「10進数」「16進数」などがあり、これはそれぞれ計算などに使用されます。
- 2進数 — コンピューターが理解できる唯一の表示方式
- 8進数 — 今となっては使われることがなくなった過去の表示方式
- 10進数 — 人間が普段使っている表示方式
- 16進数 — 2進数と非常に相性が良く、リソースの消費が少ない表示方式
- 60進数 — 時計などで使用される表示方式
2進数は主にコンピューターが使用している表現方式で、人間は10進数と呼ばれる方式を採用しています。
16進数については後述しますが、今ではほとんど聞くことのなくなった8進数というものも存在します。
8進数についてはあまり具体的な解説は必要ないと思いますので、簡単に説明するだけにとどめます。
今では当たり前となっている「1バイト = 8ビット」ですが、まだパソコンというものが普及する以前は6ビットや9ビットのマシンも数多く存在しました。
元々、”バイト”は処理系に依存するデータ長を指します。
よってこの6ビットや9ビットのデータ長を効率よく使うために使われていたのが8進数です。
詳しく知りたい方は改めて別の記事を調べてみても面白いかもしれませんが、まずここでは「”進数”とは数の表現方式を表すもの」だということだけ覚えておいてください。
人間が使う10進数との違い
私たちが普段使っている進数は「10進数」と呼ばれる方式ですが、これはどのような仕組みなのかについても簡単に理解しておきましょう。
10進数というのは0~9までの10通りの数を使って全ての数値を構成する方式です。
当たり前ですが、「0,1,2,3,4,5,6,7,8,9…」と続き、9の次は左に桁を増やしてその桁を1にし、また同じ繰り返しを行います。
このことから1桁しかない場合も左側には常に「0」という数があることを意味しています。
では16進数はどのように表すのか?についてですが、桁を増やす条件が「16」になります。
と言っても数というのは0~9までしか存在しない為、これを超える部分について(10~15)は「A~F」の6文字を代用します。
よって、0~20までを16進数に置き換えると以下のようになります。
10進数 16進数 ------------ ------------- 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 A 11 B 12 C 13 D 14 E 15 F 16 10 17 11 18 12 19 13 20 14
2進数と16進数の相性
記事の始めに「2進数と16進数は相性が良い」と書きましたが、なぜ相性が良いのかについてはこれまでの記事ではまだわかりません。
そこでこれから解説してみたいと思います。
まず2進数についてですが、例として10進数での155を2進数で表すとどうなるでしょうか?
コンピューターが判断できるものは0と1のみのため、答えは「10011011」となります。
しかしこれでは人間にとっては即座にこの数値が表す答えを判断することは不可能です。
ここで16進数が登場するわけですが、この2進数を4桁ずつ切り分けていくと見事に16進数の数が割り出せるため、これが「2進数と16進数は相性が良い」と言われる理由となっています。
2進数→16進数の変換方法
とは言っても、実際に変換してみない事にはピンとこないと思いますので、もう少し噛み砕いて説明します。
まず2進数を16進数に変換するためには、必ず2進数を4桁のセットにして分割します。
例えば先ほどの155という数値は2進数で「10011011」となりますので、前半4桁の「1001」と後半4桁の「1011」に分割します。
次にこの4桁の法則を覚える必要があります。
法則とは、セット毎の一番右側の数値を「2(2進数)の0乗」とし、桁が増える毎に「2の〇乗」という形で増やしていきます。
要するに4桁1セットなので、左から順に「2の3乗」「2の2乗」「2の1乗」「2の0乗」となるわけです。
あとは桁の回答と2進数の該当する桁数の数値を掛けて、最後に全ての数値を足した数に16進数を当てはめるだけで変換完了です。
なお”0x9B”の「0x」とは、16進数ですよという意味を表す記号のようなものだと覚えておいてください。
こう記述しておくことで、これが何を意味しているものなのかが解ります。
16進数を使用するケース
ここまでは16進数そのものの特徴や2進数との相性について解説してきました。
しかしプログラミングを学習している方が16進数を使うケースは恐らくないはずです。
というのも、プログラムや各種仕様書では10進数がベースとなっているため、まず目に触れることはありません。
プログラムは中身を見た場合にすぐ理解できるように作っている必要があります。
仕様書にしても16進数で書かれている数値では即座に理解することが困難なため、人間が目にするものはほぼ全て10進数で記述しないといけません。
ではどういった場合に16進数が使われるのかと言うと、制御系システムの構築やインフラ系で使われます。
これらは他のプログラムと比べ人間が理解する必要性が極度に少ないため、コンピューターがより素早く理解できるように16進数で表記されています。
こういった制御系等のエンジニアを目指す方にとっては、16進数や2進数は必ず習得する必要がある計算方式だといえます。
まとめ
今回は16進数について基本的な部分を解説してみましたが、いかがでしたか?
普段はあまり使う機会のないものだと思いますが、いざ必要になった場合に慌てない為にも、是非基本的な部分だけでも理解しておくようにしましょう。