コンピュータが二進法なのは周知の事実だと思いますが、ここは一つその二進法の仕組みと実際コンピュータがどうやって二進法を表現しているかをみてみましょう。
二進法というのは言葉からも解る通り、2 つずつ上の位にあがっていく数の数え方です。
たとえば 10 進法ですと 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 で、十になるとき初めて桁があがります。 10 というわけです。仕掛けはこれと一緒で要するに 2 になったときに桁があがるわけです。0 → 1 → 10 という訳ですね。
ではなぜコンピュータはこの二進法を使っているのでしょう?
答えは簡単です。この方が回路を組む上で簡単に数字を表現できるからです。コンピュータは 0 と 1 の判別を電圧(ボルト)でみています。電圧が 0 かそうでないかで 0 か 1 を判断しているのです。では 0 以外の場合というのは何ボルトくらいなのでしょうか?
これは時代とともに下がる傾向にあります。
僕が初めてコンピュータを勉強し始めた頃は、 5 ボルトでした。しかし時代が進むにつれてこの電圧は下がっています。理由は簡単で電圧が低ければ低いほどトランジスタ(増幅装置)が電圧をあげる(そして、下げる)時間が短くなるからです。
では最初から 1 ボルトとか低い電圧にすればよいではないかという話になりますが、これも答えは簡単で、電圧差がが小さくなれば小さくなるほど正確に判別するのが難しくなります。従って技術が進むにつれてより電圧差が狭くなっても判別できるようになり、電圧の立ち上がり(および下がり)速度を速くするために、電圧差を下げることができるようになったのです。
16 進法の登場
さて、コンピュータが二進法で動いているのはわかりました。つまり電圧がかかれば 1 、なければ 0 というわけです(実際の回路は、NOT がかけられているので、電圧がかかれば 0 、そうでなければ 1 のようです)。
これは要するにスイッチみたいなもので、0 が OFF、1 が ON と考えるのがわかりやすいでしょう。そしてこの一つのスイッチのことをビットと呼びます。ここで気づいた人もいると思いますが、よく○○ビット・コンピュータとか○○ビット CPU とかいう言葉を聞いたことがあると思います。
そのビットとはつまりこのスイッチの数を表しているのです。
たとえば 32 ビット・コンピュータというのは、32 個のスイッチがついているわけです。一度に 32 個の電圧を判別できるわけですね。32 ビットということはこれを二進法で表すと、数字が 32 個並ぶことになります(笑い
例:32 ビット( 32 桁)
0000000000000000000000000000000
16 ビットでも 16 桁!
こんな桁数の数字をいちいち紙にだって、エディタにだって書いていられません。そこで登場するのが 16 進法という数の数え方です。これは先ほどの説明にならえば、16 になったときに桁が繰り上がることになります。ではその数え方を以下に記します。
0 から 15 まで数える:
0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → A → B → C → D → E → F
そして F の次が 10(いちまると発音します)で、このとき初めて桁が増えます。
16 は 2 進法で数えると、何桁になるでしょうか?
16 を 2 で割ってみましょう(16 / 2 )。 8 ですね。まだ 2 で割れますね( 8 / 2 )。すると、 4 です。また 2 で割れますね( 4 / 2 )。2 になります。まだ 2 で割れますね( 2 / 2 )。すると 1 になりました。これ以上 2 で割ることはできません(あくまでも電圧が上がったか、0かなので小数点はありません)。
ということは 16 は 2 で 4 回、わり算できることになります。ということはつまり 16 進法は 2 進数の 4 桁分を表すことができるのです。
これで 32 ビットもだいぶ桁数が減りました。
例:32 ビットを 16 進法で表現する(8桁)
00000000
だいぶすっきりしましたね。これなら、紙に書くのもそんなに大変そうじゃありません。
計算してみよう
二進法と 16 進法の二つの数の数え方を説明してきました。しかしながらこれらの数え方はボクらの生活とは馴染みのない数え方です。ボクらはどうしても十進法で生きています。ので、二進法と 16 進法を 10 進法に変換する方法をここで紹介しましょう。
二進法から十進法
これは単純に桁数をべき乗して、それを足していけば OK です。
たとえば、1101 の場合、以下のような計算になります。
1000 = 2 ^ 3 = 8
100 = 2 ^ 2 = 4
00 = 0
1 = 2 ^ 0 = 1
8 + 4 + 1 = 13
という具合です。よく子供の頃、1 + 1 = 2、2 + 2 = 4、4 + 4 = 8、8 + 8 = 16、16 + 16 = 32 ……というのをしたと思うのですが、これがまさに二進法だったのですね。
16 進法から十進法
こちらも二進法とやることはそう変わりません。結局十進法だろうが 16 進法だろうが桁数がその進法のべき乗になるわけです。ただ注意しなければ行けないのは、16 進法で使う ABCD については覚えておかなければなりません。
A = 10, B = 11, C = 12, D = 13, E = 14, F = 15
これを覚えておけばあとは計算するだけです。たとえば 7A6B を変換してみましょう。
16 ^ 3 * 7 = 28672
16 ^ 2 * 10 = 2560
16 ^ 1 * 6 = 96
16 ^ 0 * 11 = 11
28672 + 2560 + 96 + 11 = 31339
とまぁこんな具合です。今では Windows の電卓にこの機能があるので自分で計算すると言うことはないとは思いますが、どういう仕組みかは知っておくと良いかもしれません。