2017年2月9日木曜日

なんで16進数!?(怒)【回路、デジタル自己満説明】

専門外の方に回路、コンピュータの動作原理を解説し興味を持ってもらうためのブログ。今回は、何で16進数なんて変な数え方を使ってるの?という記事です。

話の内容

○2進数をちょっと掘り下げると16進数

“0”と“1”しか存在しない世界では2進数を使います。
じゃ16進数ってなんなんだよ(怒)
というわけで、もうちょっと掘り下げます。

複数の文字を使ったNN進数(勝手に命名)

前回N進数というものをこんな風にまとめました。
N進数
2進数012種類の数字のみ存在し、一つ上の桁は2倍の重みを持つ。
10進数0~910種類の数字のみ存在し、一つ上の桁は10倍の重みを持つ。
16進数0~9A、B、C、D、E、F16種類の数字のみ存在し、一つ上の桁は16倍の重みを持つ。

コレを発展させます。

文字二つで一つの数字を記述する100進数を考えます。
100進数
100倍の桁(文字二つ)…βの位 1倍の桁(文字二つ)…αの位
9 9 9 9
00~99までの100段階を表現できる 00~99までの100段階を表現できる

便宜上、右側の位をαの位、左側の位をβの位と呼ぶことにします。
αの位00~99(数え方は10進数)までの100段階を表現でき、
βの位00~99(数え方は10進数)までの100段階を表現できます。
βの位αの位の100倍の重みを持ちます。
つまり、
100進数00~99までの100種類の数字(文字二つセットで一つの数字)のみ存在し、
一つ上の桁(αに対しβ)は100倍の重みを持つ。
注意するのは“文字二つセットで一つの数字”であること。このルールを変えちゃうと00~99までの100種類の数字が存在しなくなってしまいます。

どうでしょうか。同じように数字を表すことにお気付きですか。
3485という値があった場合、
10進数であれば、3485 = 3x1000 + 4x100 + 8x10 + 5x1
100進数であれば、3485 = 34x100 + 85x1(左側二つは右側二つの100倍)
ですね?

このようにして、
文字をいくつかまとめて一つの数字としたNN進数(勝手に命名)を作ることができちゃいます。


2進数を複数の文字でまとめてみる

通信をする上で都合がいいのは0と1と書きましたが、2進数というのは表記するとこんなんです。
00001010001111001001
非常に見辛く、隣の人に伝えるのにも苦労します。
そこで、2進数の文字を何個かまとめたNN進数(勝手に命名)に変換します。
下が変換の表です。
[2のN乗]進数
2進数
01の2種類の数字
00001010001111001001
4進数
0~3の4種類の数字
(2進数2文字一つの数字に対応)
00 00 10 10 00 11 11 00 10 01

0 0 2 2 0 3 3 0 2 1
8進数
0~7の8種類の数字
(2進数3文字が一つの数字に対応)
000 001 010 001 111 001 001

0 1 2 1 5 1 1
16進数
0~9,A~Fの16種類の数字
(2進数4文字一つの数字に対応)
0000 1010 0011 1100 1001

0 A 3 C 9
(右側の小さな桁から区切っていき、最後に文字が足りなければ0を追加します。153000153と表記するのと同じです。)

2進数で表そうが10進数で表そうがどちらもただの値なので、当然お互いに変換することができます。
ですが、10進数だと上表のように2進数のいくつかの桁をまとめるということができません。
理由は下表のように桁上がりのタイミング(値)が異なるので途中で文字の数が変わってしまうから。

10進数2進数
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
↑↓桁の数が異なってしまう↑↓桁の数同じ
101010
111011
121100
131101
141110
151111

桁上がりのタイミング(値)が2進数とキッチリ一致するのは、[2のN乗]進数。(上表)
そんなわけで、[2のN乗]進数の中から都合のよいものを使うことになります。

なんで16進数を選んだの

で、どれが都合がいいの?ということになりますが、数字を表す文字種が多ければ大きな値でも桁が少なくなり隣の人に伝えやすいかなと。ですが、あまりたくさんの文字種を定義するとその文字種自体を覚えるのが大変です。

大抵の人間はデフォルトで0~9の10個を覚えています。なら、それにA、B、C、D、E、Fという数字を追加して16進数を使えばええんでない?そうすれば16というのは2の2乗のさらに2乗(=2x2 x 2x2=16)で、2進数での桁の数も2の2乗(=4)コ。何から何まで2の2乗なので何かと都合がよろしい。

16進数を使っているのは以上のような理由でした。

プログラムを書いていると昔々は8進数というものを扱っていた形跡に気付きます。8進数を選んだ方々もいらっしゃったようです。ですが、現在は16進数が主流です。
2だけで表すと都合がいいので、3という数字を嫌ってるんですね。(8 = 2の3乗)


話の内容

こんな話でしたが内容は伝わりましたでしょうか。
○2進数をちょっと掘り下げると16進数


【関連記事】  1バイト…1バイト…
何で2進数!?(怒)
デジタルは“0”と“1”?
“情報”の伝え方

コンピュータ動作原理解説

16進数を説明


スポンサーリンク



blogramのブログランキング



0 件のコメント:

コメントを投稿