パソコンは16進数を好む

位取り記数法とは

数は十種類の文字(0,1,2,3,4,5,6,7,8,9)で表現する。
何もなければ「0」、一個なら「1」、二個なら「2」のように、数を意味する一文字を当てはめる。

  0
1
●● 2
●●● 3
●●●● 4
●●●●● 5
●●●●● ● 6
●●●●● ●● 7
●●●●● ●●● 8
●●●●● ●●●● 9
●●●●● ●●●●● 10
●●●●● ●●●●● ● 11
●●●●● ●●●●● ●● 12



十個以上になると、一文字で数を表すことができない。
そこで二つ以上の文字を組み合わせて数を表現する。(右表)

 

この方法は数が十倍になるたびに桁が増えていく。
だから、どんなに大きな数であっても、たった十種類の文字だけで表現できるのだ。

 

このように、桁を伸ばしていく数の表し方を位取り記数法という。
どんなに大きな数であっても、位取り記数法なら桁を増やすだけで対応化のだ。

 

もし、位どり記数法を使わなかったら、大きな数字を表すために字を用意しなくてはならない。
例えば、漢字がいい例である。
万、億、兆、京、垓、杼(本当はのぎへん)、穣、溝、澗、正、載、極・・・・
のように、より大きな数を表したければ、新たに文字を用意しなくてはならないのだ。

100
1000
10000
100000000
1000000000000
10000000000000000
100000000000000000000

10進数と2進数

日常では十種類の文字(0,1,2,3,4,5,6,7,8,9)を位取り記数で利用する。
もし、使える文字が2種(0と1)しかなかったとしても、位取り記数法は同じように成立する。

  十種で表現する場合 二種で表現する場合
  (十進数) (二進数)
0 0 0
1 1
●● 2 10
●●● 3 11
●●●● 4 100
●●●●● 5 101
●●●●● ● 6 110
●●●●● ●● 7 111
●●●●● ●●● 8 1000
●●●●● ●●●● 9 1001
●●●●● ●●●●● 10 1010
●●●●● ●●●●● ● 11 1011
●●●●● ●●●●● ●● 12 1100

十種類の文字を利用する位取り記数法を10進数、二種類の文字を利用する場合を2進数という。
日常で使う数字は10進数なのだ。

 

10進数で表現する場合は、十個以上で桁が増えた。
2進数を使ったときは2個以上で桁が増える。

 

桁が増えるタイミングが違うでだけで、10進数も2進数も、限定された文字数を使いまわして、大きな数を表そうという発想だ。

 

こうなると、使える文字の数を決めれば、5進数や8進数、4進数もあり得ることになる。
(実用的かどうかは別として)

 

16種類の文字を用意すれば、16進数を作ることができる。
16種類の文字のうち十種類は通常の数字(0〜9)、6種類はA〜Fまでのアルファベットを使用する。

- 10進数 2進数 16進数
0 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
●●●●● ●●●●● ●●●●● ●● 17 10001 11
●●●●● ●●●●● ●●●●● ●●● 18 10010 12

指を折って数える動作と十進数は非常に相性がよい。
指の数が10本だからだ。
もし、日常生活で9進数や3進数を使うようになったら大変混乱することだろう。

 

人間が指を折って数える代わりに、コンピュータは電流が流れる、流れないという二種類の動作で数を扱う。
コンピュータは10進数よりも、二種類の数字しか使わない2進数との相性が優れているのだ。

 

ここで困ったことが起きる。
コンピュータを扱う技術者は、10進数ではなく2進数を使わなくてはならない。
例えば、「500」は「111110100」と書くことになる。

 

「500」の場合、3桁で済む数字も二進数では9桁で表すので、たまったものではない。

 

16進数と2進数の変換

そこで、コンピュータにとっては二進数のように扱え、人間にとっては短い桁で納まるような書き方が求められるようになった。
そのような都合のよい書き方が、16進数だ。

 

0〜Fの範囲で2進数と16進数の対応表を見てみよう。

2進数 16進数 10進数
0000 0  0
0001 1  1
0010 2  2
0011 3  3
0100 4  4
0101 5  5
0110 6  6
0111 7  7
1000 8  8
1001 9  9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15

この表を見ると、1桁の16進数が最大値Fのとき、4桁の2進数も最大値1111になることが分かる。
言い換えると、1桁の16進数を2進数に変換する場合、2進数はどんなに大きくても最大で4桁あれば十分ということだ。

 

二桁の16進数の最大値はFFで、2進数では11111111になる。(十進数では255)

 

この値は8桁の二進数の最大の値だ。
ここから2桁の16進数を2進数に変換する場合、2進数はどんなに大きくても最大で8桁あれば十分ということだ。

 

同様に考えると次のように考えることができる。

 

1桁の16進数→4桁の2進数で変換可能
2桁の16進数→8桁の2進数で変換可能
3桁の16進数→12桁の2進数で変換可能
n桁の16進数→(4×n)桁の2進数で変換可能

 

このことから、2進数と16進数は「4桁」をキーワードとして強い関連を持っていることが確認できる。

 

2進数を16進数に変換する場合、2進数を4桁ごとに区切れば簡単だ。
その区切りごとに対応表を見て16進数に置き換えればいい。

 

例えば、次の2進数があったとする。
11101011101000011011001110
人間にとっては長くて扱いにくい量だ。

 

これを4桁ごとに区切る。先頭は2桁なので00を付けて4桁にあわせよう。

0011 1010 1110 1000 0110 1100 1110

 

 

それぞれの4桁を、対応表を見ながら16進数に置き換えるのだ。

0011 1010 1110 1000 0110 1100 1110
3 A E 8 6 C E

 

区切りを外した値3AE86CEが、16進数となる。

 

対応表があれば簡単に変換できることが分かったと思う。
たった16個の対応さえ覚えてしまえば、対応表がなくても変換は可能だ。