2進法からの16進法への発展
2進法でコンピュータの扱う数字を表現していると不都合が生じます。同じ値を10進法と2進法で表現すると以下の通り2進法のほうがたくさん桁が必要になります。
| 10進法 | 2進法 |
|---|---|
| 100 | 110 0100 |
| 1000 | 11 1110 1000 |
| 10000 | 10 0111 0001 0000 |
16進法はこの問題を解決するために導入されて今でも一般的に使われています。16進法は英語でhexadecimalと呼び、もとは「16の」を意味するギリシア語です。
2進法の4桁をひとまとめにする
2進法の4つの桁で表現できるのは24=16種類の値になります。0から数えるので15までです。16になると左側の位を追加して10と表記することになります。
ただここで困ったことがでてきます。10進法の10をそのまま10と表記すると16進法でいう10つまり16と見分けがつかなくなります。15までは1桁、16で2桁と表現したいのです。ここで新しい数字を導入することになりました。10〜15にA〜Fのアルファベットを数字として割り振ることにしたのです。以下0〜16までの10進法、2進法、16進法での表記を見てましょう。
| 10進法 | 2進法 | 16進法 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 10 | 2 |
| 3 | 11 | 3 |
| 4 | 100 | 4 |
| 5 | 101 | 5 |
| 6 | 110 | 6 |
| 7 | 111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
| 16 | 10000 | 10 |
このようにすると2進法ではたくさんの桁が必要であったのに少ない桁でより大きな数が表現できます。16進法では2桁めは「16の位」、3桁目は「256の位」となり、以降16をかけていったものになります。
上の表に16進法を追加してみましょう。
| 10進法 | 2進法 | 16進法 |
|---|---|---|
| 100 | 110 0100 | 64 |
| 1000 | 11 1110 1000 | 3E8 |
| 10000 | 10 0111 0001 0000 | 2710 |
16進法の例
コンピュータでよく目にしやすい16進法の使用例として色指定があります。HTMLでの色指定は頭に#をつけた6桁の16進数で指定できます。6桁といっても実際は2桁ずつ3つに分けてそれぞれがRGBつまり赤、緑、青の指定になります。2桁の16進数なので表せる範囲は00〜FF、10進法でいうと0〜255までとなります。00が暗くFFが明るい意味になりますから黒は#000000となり白は#FFFFFFとなります。以下指定の値と色を見てみましょう
| 色指定 | 出力色 | 説明 |
|---|---|---|
| #000000 | なにも出力なし | |
| #FFFFFF | 最大出力 | |
| #FF0000 | 赤だけ最大 | |
| #00FF00 | 緑だけ最大 | |
| #0000FF | 青だけ最大 | |
| #FFFF00 | 赤と緑を最大 | |
| #FF00FF | 赤と青を最大 | |
| #00FFFF | 緑と青を最大 | |
| #808080 | 赤緑青すべてで半分の出力 | |
| #800000 | 赤だけ半分の出力 | |
| #008000 | 緑だけ半分の出力 | |
| #000080 | 青だけ半分の出力 | |
| #808000 | 赤と緑を半分の出力 | |
| #800080 | 赤と青を半分の出力 | |
| #008080 | 緑と青を半分の出力 |