2017年2月9日木曜日

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

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

話の内容

前回はこんな話を書きましたが、今回はこんな話です。
○2進数をもうちょっと掘り下げると16進数

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

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

前回N進数というものをこんな風にまとめました。

    2進数 …0と1の2種類の文字が存在し、一つ上の桁は2倍の重みを持つ。
   10進数 …0~9の10種類の文字が存在し、一つ上の桁は10倍の重みを持つ。
   16進数 …0~9とA、B、C、D、E、Fの16種類の文字が存在し、一つ上の桁は16倍の重みを持つ。

コレを発展させます。


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

便宜上、右側の位をαの位、左側の位をβの位と呼ぶことにします。
αの位は00~99までの100段階を表現でき、
βの位も00~99までの100段階を表現できます。
βの位はαの位の100倍の重みを持ちます。

つまり、
   100進数 00~99までの100種類の文字(二文字セットで一つの数値を表す一文字)が存在し、一つ上の桁(αに対しβ)は100倍の重みを持つ。

注意するのは、文字二つで一桁であること。
このルールを変えちゃうと、00~99までの100種類の文字が存在しなくなってしまいます。
あと、00から99まで数える数え方は10進数です。


これってどうですか?
同じように数値を表すことができますね?

3485という数字があった場合、

10進数であれば、3485 = 3x1000 + 4x100 + 8x10 + 5x1
100進数であれば、3485 = 34x100 + 85x1
ですね?


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


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

機械にとって都合のいいのは2進数といいましたが、
2進数というのは、表記するとこんな数字です。
00001010001111001001

非常に見辛く、隣の人に伝えるのにも苦労します。
そこで、2進数の文字を何個かまとめたNN進数(勝手に命名)に変換します。
下が変換の表です。
(右側の小さな桁から区切っていき、最後に文字が足りなければ0を追加します。153を000153と表記するのと同じです。)

2進数
0,1の2種類の文字
00001010001111001001
4進数(2進数が2文字)
0~3の4種類の文字
00 00 10 10 00 11 11 00 10 01

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

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

0 A 3 C 9

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

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

文字数のズレがキッチリ一致する条件は、[2のN乗]進数。
(上表で挙げた4進数、8進数、16進数、…進数が[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乗なので何かと都合がよろしい。



プログラムを書いていると、昔々なにやら8進数というものを扱っていた形跡が残っています。
8進数を選んだ方々もいらっしゃったようですが、現在は16進数が主流です。


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


話の内容

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


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



スポンサーリンク

スポンサーリンク



0 件のコメント:

コメントを投稿