植物 植物
初心者講座:2進数と16進数の基礎

AOBA's Information Processing Education



1997/11/30

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してくださるようお願いします)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


 コンピュータの内部では、文字も数字も絵も写真も動画も音声...(切りがない)も、すべては0と1のたった二つの値の集合として記憶しています。この点は、フロッピーディスクやCDの中に含まれるファイルについても同じことが言えます。
 なぜそうなのか?、というような疑問は持たないこと。それはコンピュータ(のハードウェア)にとって最も都合がよいから、と割り切りましょう。
 そこでコンピュータについて学ぶには、0と1の二つの値だけで成り立つ数の体系を理解する必要があります。この数の体系が2進数なのです。

 ところで、現実の世界では一般に10進数が使われていますよね。数を表現する値は必ず10進数で考える癖が付いてしまっていると思います。ここで発想の転換が必要です。それは、数の値の表現方法は無数に存在する、という事です。10進数はその中の一つの数の体系にしかすぎません。

 そこでまず、10進数について整理してみましょう。

 例えば、1234(千二百三十四)は、1つの千と二つの百と三つの十と四をすべて加算した値であることは分かりますね。つまり、

 1234=1×103+2×102+3×101+4×100

 です。
 上式の右辺の4つの桁にそれぞれ重みが付いています。最も左の桁(1)は103,右から数えて3番めの桁(2)は102,右から数えて2番めの桁(3)は101,最も右の桁(4)は100,が重みです。
 この重みは、すべて10nになっているじゃないですか。だから千二百三十四は10進数なのです。これをもっと簡単に言えば、10になると1桁繰り上がるのが10進数です。

 さて、もし10になると1桁繰り上がるのが10進数ならば、10進数で1つの桁を表現するのにいくつの数が必要か分かりますか。それは当然10個ですね。つまり10進数で1つの桁を表現するには、"0","1","2","3","4","5","6","7","8","9"の10個の数が必要です。この各桁に重み(10n)を乗じて加算すると、10進数で表現した値となります。

 2進数も10進数と同じように考えましょう。

 10進数は各桁の重みは10nでした。だから2進数の各桁の重みは2nです。(nは右から順に0,1,2,3,4.....)
 10進数は10になると1桁繰り上がりました。だから2進数は2になると1桁繰り上がります。
 10進数は1つの桁を表現するのに10個の数が必要でした。だから2進数は1つの桁を表現するのに2個の数が必要です。その2個とは"0"と"1"です(0と1以外表れない)。
 これを少し具体的に示しましょう。なお、以下で記した値が10進数か2進数かを区別するため、10進数以外のn進数で表現した値は、(....)n とします。

 (1011)2

 上記は2進数で表現した値です。この2進数の読み方はセンジュウイチではなく、「イチゼロイチイチ」と読みます。
 (ちょっとバカにしているようですが、がまんしてください)もし貴方が私に向かって、「リンゴを2進数でイチゼロイチイチ個ください」と言ったら、私は貴方に何個のリンゴを渡すでしょうか。最初に答えを言ってしまえば11個です。もっと正確に言えば、10進数で11個のリンゴを貴方に渡します。なぜなら、

 (1011)2×23×22×21×20=8+0+2+1=11

 だからです。つまり(1011)2と11は完全に同じ値であり、その表現方法が異なっているだけなのです。
 2進数の各桁の重みは右の桁から順に、20,21,22,23、であり、(1011)2に対応させて、1か0をかけています。これを計算して11になりました。

 このような2進数から10進数への変換はよく行いますので、ここで行った変換方法をよく覚えておいてください。

(注)n進数におけるnを、基数と呼びます。

 ところで、2進数は小さな値を表現するにも多くの桁が必要です。これはちょっと不便なので、コンピュータの技術者はよく16進数を利用します(コンピュータ内部では2進数なのですが、便宜的に16進数を使用する、という意味です)。別に他の基数でもよいのですが、2進数と16進数の相互変換が容易であるということから、16進数がよく用いられるのです。
 16進数もこれまでとまったく同様に考えます。

 10進数は各桁の重みは10nでした。だから16進数の各桁の重みは16nです。(nは右から順に0,1,2,3,4.....)
 10進数は10になると1桁繰り上がりました。だから16進数は16になると1桁繰り上がります。
 10進数は1つの桁を表現するのに10個の数が必要でした。だから16進数は1つの桁を表現するのに16個の数が必要です。

 上記の3番目の項目については解説が必要でしょう。
 1つの桁を表現するのに16個の数が必要、とありますが、現実的には"0"から"9"までの10個の数しかありません。
 そこで16進数では便宜的に、"A"から"F"までの文字も1桁の数値とみなします。つまり、"A"は10(10は10進数の10であって、16進数では1桁の値),"B"は11,"C"は12,"D"は13,"E"は14,"F"は15と考えるのです。

 (E3A9)16

 上記は16進数で表現した値です。これは「イーサンエイキュウ」と読みます。
 では、10進数に変換してみましょう。やり方は2進数のときと同じです。

 (E3A9)1614×163×16210×161×160
      =14×4096+3×256+10×16+9
      =58281

 別に難しくはありませんね。

「演習」

 以下の二つの値を10進数に変換せよ。

設問1 (10110010)2

設問2 (B2)16


演習の解答

設問1 178     設問2 178

設問1について

 (10110010)2×27×26×25×24×23×22×21×20
=128+0+32+16+0+0+2+0=178

設問2について

 (B2)1611×161×160
      =11×16+2=178

 なぜ同じ答えなのか謎を残して、また来週。