進数 | ディジタルロジック01

数を数える

いろいろな進数(しんすう)を使って数を20まで数えてみる。ここではある規則性に気づいて見て欲しい。

10進数
つかえる数字は0~9。
  • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

8進数
つかえる数字は0~7。
  • 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, ...

16進数
つかえる数字は0~9とA~F(アルファベットも数の仲間に入れよう)。
  • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, ...

2進数
つかえる数字は0と1。
  • 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, 10010, 10011, 10100, ...


ある規則性。
数は0から数え始めることにしよう。

まずは、日常でつかう10進数に注目する。
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
つかえる数字の種類は0~9までの10種類。つまり進数の数と同じ種類の数字を使っている。10進数は10種類。10進数とは、この10種類の数字を使ってさまざまな数値を表現する数え方だ。

では5進数では何種類の数字をつかって、いろいろな数値を表現するか?
5種類の0~4まで。
では16進数では何種類の数字をつかていろいろな数値を表現するか?
16種類0~Fまで。
ここで疑問が浮かぶはず。Fってなんぞや?前章で16進数を数えた時を思い出してほしい。アルファベットを数字として扱っていたことを。…7,8,9のあとに何か新しい数字をつくっても良いのだが、せっかくならコンピュータで扱える文字を数字に見立てて使ったほうが後々便利そうだな、ということで9の次がA、Aの次がB…15番めに相当する文字がFとなった。これで0から15までの数値を一桁で表現できるようになったのだ。なのでぜひ16進数を数えるときは、0,1,2,3,4,5,6,7,8,9だけでなく、A,B,C,D,E,Fも数字として認めてほしい。



もうひとつの規則性
まずは8進数から見てみよう。
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, ...
0から数え始めて7まで数えると10になる。10進数に慣れ親しんできた人にとっては何か違和感があるかもしれない。しかしこれが正しい8進数の数え方だ。0を含めて8つ数字を数えると次の数は10になる。そう8つ数えると。これがもうひとつの規則性。

進数の数だけ数えると次の数が10になる。

こんな調子で数えてゆく。10からまた8つ数を数えると20となり、また8つで30…。見方を変えてみる。8つの数字を一塊とみる。一塊できたら位をひとつ上げる。この塊が8つ集まったならまた位をひとつ上げる。これが8進数。この規則は他の進数にも当然当てはまる。

これらの規則を使って進数をつくる
では、今から6進数を作ってみよう。6進数なのでつかえる数の種類は0~5までの6種類。0, 1, 2, 3, 4, 5までの6つを一塊としてみる。つまり0を含めて6つ数えたら次の数字は10になるのだ。もう完成。さっそく今つくったばかりの6進数を使って0から20まで数えてみよう。

6進数
  • 0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, 30, 31, 32, ...

ちなみに、ここで言う"0から20まで数えてみよう"は10進数でいうところの0から20である。



コンピュータの使う進数

コンピュータは扱っているデータ(情報)を電気が有るか無いかで判断している。電気が有るなら1、電気が無いなら0と判断し、それら0と1の並びをある規則に従って文字やら画像やら音声やらへと変換する。ではこれらの電気はどこに貯まっているのか?それはコンピュータの中にある、電気を貯めるための特殊な”つぼ”だ。コンピュータの中にはそのような"つぼ"が膨大な数入っている。その”つぼ”に電気が有るか無いかを、コンピュータは判断しているのだ。この”つぼ”はメモリとよばれる装置のなかに整然と並んでいる。ちょうど数字の桁が並ぶように。

1か0かを判断しているコンピュータは何進数を使っているのか?思い出して欲しい。
つかえる数の種類=進数の数

コンピュータ2進数を使っているということだ!



それぞれの進数の表現力
10進数は1桁あれば10の数を表現できる。これは10数えたら桁がひとつ上がる、という事実を違う視点から見たものだ。では2桁の10進数では何種類の数を表現できるか?答えは100種類である(0~99)。3桁ならば1,000種類。4桁ならば10,000種類である。ここに規則を見出そう。

  • 1桁の10進数があれば10種類の数を表現出来る。
  • 2桁の10進数があれば100種類の数を表現出来る。
  • 3桁の10進数があれば1,000種類の数を表現出来る。
  • 4桁の10進数があれば10,000種類の数を表現出来る。
  • 5桁の10進数があれば100,000種類の数を表現出来る。
種類の部分だけ見ると、一桁増えるごとに10倍増えている。10。そう、進数の数だ。つまり進数の数を桁数分だけ掛け合わせると、その桁数で表現できる数の種類になる。
  • 1桁の10進数があれば10種類の数を表現出来る。
  • 2桁の10進数があれば10×10種類の数を表現出来る。
  • 3桁の10進数があれば10×10×10種類の数を表現出来る。
  • 4桁の10進数があれば10×10×10×10種類の数を表現出来る。
  • 5桁の10進数があれば10×10×10×10×10種類の数を表現出来る。

5桁の時には進数の数である10を5回掛けあわせた数が、表現できる数の種類となっている。数学ならばこれをより簡単に書くことができる。
105=10×10×10×10×10=100,000
掛けあわせたい数の右肩に掛け合わせる回数を書く。とてもシンプル。これを”10の5乗”と読み、この書き方を指数表記と呼ぶ。今までのことをまとめて書くと、
”進数の数”の”桁数”乗=表現できる数の種類
となる。


ではさっそくのQuestion。2進数3桁で表現できる数の種類はいくつか?
 →2の3乗=2×2×2=8種類
である。本当にそうなるか確かめてみよう。2進数を3桁目まで列挙すると、
0, 1, 10, 11, 100, 101, 110, 111
111の次は1000と4桁になってしまうので、3桁で表現できる数の種類は確かに8種類であることが分かる。ちなみに上の2進数を10進数で書くとこうなる。
0, 1, 2, 3, 4, 5, 6, 7


マーブルチョコは3進数
進数は便利だ。例えば、手元に3色のマーブルチョコがいっぱいあるとしよう。

このマーブルチョコを組み合わせることで様々な数を表現できるのだ!マーブルチョコには赤と黄と茶の3色があるとする(他の色をしたマーブルチョコがあるのなら今のうちに食べてしまおう)。ここで事前に色と数を対応付けておく。赤を0、黄を1、茶を2としよう。つかえる数の種類は0~2までの3種類、つまりこのマーブルチョコは3進数になり得るということ。例えば下の図のように並べてみる。

この場合、並び順は黄赤茶である。ここで事前に対応付けていた数字に置き換えてみると102となる。ただ単に102と書いてあると、何進数の102なのか分からなくなるので、今後は3進数の3を取って、102(3)という風に書いておこう(102 Base 3と書いても良いだらう)。

さて、これは3進数という数え方に従った立派な数字であるのだが、人に教えるときにはちょっと分かり辛いし誤解も生まれやすい。そこで、これを10進数に直してみようと試みる。一番確実な方法は、0(3)から102(3)まで数を数え、それを10進数と対応づける方法だ。やってみよう。
0, 1, 2, 10, 11, 12, 20, 21, 22, 100, 101, 102! (3進数マーブルチョコ)
0, 1, 2,  3,  4,  5,  6,  7,  8,   9,  10,  11! (10進数)

これで102(3)は、10進数で言うところの11だったということがわかった!黄赤茶のマーブルチョコは10進数では11を表していた。このように進数を使いこなすとマーブルチョコであろうが色鉛筆であろうが、何であろうが数字にできてしまうのだ。コンピュータはマーブルチョコの代わりに、”つぼ”に入っている電気を使っているだけなのだ。

しかし、人に数字を伝えるために10進数へ変換するたび、毎回その数まで数えていって10進数と照らし合わせていたら、例えば2110120(3)などというマーブルチョコに出会った途端、そんな数まで数えてゆくのが嫌になるだらう(その前にこんな数を人に伝えたいという気も起きないだらう)。ここで便利な方法をご提案。表現数を利用するのだ。



10進数への変換方法

マーブルチョコの大群が表しているとても大きな数、2110120(3)を簡単な足し算掛け算だけで10進数に変換する方法をお教えしよう。その方法とは、

各桁ごとに分けて考えて、あとから全部足す。

今はなんのことを言っているのか分からなくて良い。今注目すべき点はひとつ。桁上りの瞬間である。例えば2進数を0から数え始め、桁がひとつ繰り上がるときを10進数で表現するといくつになるかを考える。2進数では0のつぎは1であり、これは10進数で1を表す。2進数をもうひとつ数える。1の次は10となる。桁上りの瞬間だ。この10は10進数で2を表す。この作業を繰り返す。表にまとめるとこうなる。
Bin: 1, 10, 100, 1000, 10000, 100000, 1000000, …
Dec: 1,  2,   4,    8,    16,     32,      64, …
BinはBinaryつまり2進数の意味。
DecはDecimalつまり10進数の意味。
ここでDecの行をよく見てほしい。ひとつ進むごとに2倍されている。
これを数式で表すならば、次のようになるだらう。
2桁乗
桁を0から数え始めれば、上の数式が成り立つはずだ。0番目の桁は20=1であり、確かに10進数で1だ(指数函数の法則より、どんな数字でも0乗すると1になるのだ!証明は後述)。同様に5番目の桁は25=2×2×2×2×2=32であり、10進数で32を表している。表に"2の桁乗"の行をNewとして追加することができる。こんなふうに。
Bin:  1, 10, 100, 1000, 10000, 100000, 1000000, …
Dec:  1,  2,   4,    8,    16,     32,      64, …
New: 20, 21,  22,   23,    24,     25,      26, …
この表は縦に見ればすべて同じ数字が並んでいる。ちなみになぜ"2の桁乗"なのかというと、2進数だからである。一般化するとこれは、
進数桁乗
となる。つまり8進数ならば"8の桁乗"となる。これを応用すれば良い。桁が上がった瞬間というのは最上位の桁だけが1となる瞬間なので、それを10進数で表せれば後はその桁の数字倍するだけでその桁だけを10進数に変換することができるのだ。つまり500(3)は5×100(3)とばらせるので、5×32=5×9=45となり結果500(3)= 45(10)が求まったわけだ!それをすべての桁で計算し、答えをすべて足し合わせればそれぞれの進数から10進数への変換ができる。言葉で書くよりも実際にやってみよう。

最初に、マーブルチョコは3進数なので”進数の数”は3である。これを忘れてはならない。次に、"進数の桁乗"を書く。桁は0から数え始めることに注意。1桁目には0を、2桁目には1を3桁目には2を、3の右肩に書く…。
36, 35, 34, 33, 32, 31, 30
これで各桁が1のとき、10進数でいくつになるかを表せた。次にこれらの数字を各桁の数字と掛け合わせる。2110120(3)なので、
2×36, 1×35, 1×34, 0×33, 1×32, 2×31, 0×30
と書ける。これで各桁ごとに10進数に変換されたので、最後にこれらを足しあわせ、2110120(3)が10進数でいうところのいくつなのかを求める。
 2×36 + 1×35 + 1×34 + 0×33 + 1×32 + 2×31 + 0×30
=2×729 + 1×243 + 1×81 + 0×27 + 1×9 + 2×3 + 0×1
=1,458 + 243 + 81 + 0 + 9 + 6 + 0
=1,797(10)
掛け算と足し算だけで2110120という大きな数のマーブルチョコ3進数を10進数に変換できた!電卓を使えばより簡単に変換することができる。さて、この章の始めに説明した10進数への変換方法をもう一度見てみよう。

各桁ごとに分けて考えて、あとから全部足す。

各桁ごとに10進数に変換して、ぜんぶの桁を10進数に変換できたら、それら答えを全部足す。いろいろな例を見てみよう。

2進数ならばもっと簡単。
100(2)は、
 1×22 + 0×21 + 0×20
=1×4 + 0×2 + 0×1
=4 + 0 + 0
=4(10)

10010(2)は、
 1×24 + 0×23 + 0×22 + 1×21 + 0×20
=1×16 + 1×2
=16 + 2
=18(10)

101011(2)は、
 1×25 + 0×24 + 1×23 + 0×22 + 1×21 + 1×20
=1×32 + 1×8 + 1×2 + 1×1
=32 + 8 + 2 + 1
=43(10)

111111(2)は、
 1×25 + 1×24 + 1×23 + 1×22 + 1×21 + 1×20
=1×32 + 1×16 + 1×8 + 1×4 + 1×2 + 1×1
=32 + 16 + 8 + 4 + 2 + 1
=63(10)
となる。これらの計算は面倒臭がらずに慣れるまできちんと手計算をしてゆこう。すると、他の進数でも同じことができるようになる。なお、計算しているときに使っている数は10進数であることを忘れないように。計算に慣れてきたら力試しに次の数字を10進数に変換してみよう。
365(8)
10進数で、
245(10)
が求まれば大正解だ。



365(8)は、
 3×82 + 6×81 + 5×80
=3×64 + 6×8 + 5×1
=192 + 48 + 5
=245(10)
であった。掛け算と足し算を使うことで進数変換できたわけだ。しかし、ある進数を10進数に変換できるだけでは物足りないと感じる場面が出てくるだらう。例えば、192という10進数を、例の3進数マーブルチョコ向けに変換したい場合だ。パッと思いつく方法は、3進数と10進数を並べて書いてゆき、10進数の192と同じ位置にいる3進数を見つける方法だ。しかしこれでは面倒だ。次に思いつく方法は、10進数への変換と同じく計算で導く方法だ。具体的な方法は思いつかなくとも、掛け算と足し算で10進数へ変換できたのなら、数学的に逆の演算、つまり割り算と引き算で他の進数へと変換できるのではないか?と。単純な発想。しかし、進数の世界は面白いことに、こんな単純な発想で正しい答えが導けるのだ。ただし今回の場合引き算は必要ない。数学はシンプルであれ。



もっと自在に
さて、では10進数を好きな進数へ変換できる方法を記録しよう。前章で説明したとおり割り算を用いる。例えば365(10)を6進数へと変換してみよう。最初にやることは、もうお気づきかもしれないが、365を6で割るのだ。適当な10進数を進数で割るのだ。ここでは余りが出てくることが重要なので、小数点を使った答えや分数を使った答えは書かない。365を6で割った答えを右に、余りを下に書くとこうなる。
365)60  5
365を6で割ると60あまり5。これを更に6で割る。
365)60)10  5  0
60を6で割ると10あまり0。割り切れなくなるまで割り続ける。
365)60)10)1  5  0  4
10を6で割ると1あまり4。なんと、これだけで6進数へと変換できたのだ。余りに注目してほしい。
5  0  4  1
これを逆さまに見ると、
1405
これこそまさに365(10)=1405(6)答えである!
本当に正しいのか確認してみよう。1405(6)を10進数に変換してみよう。
 1×63 + 4×62 + 0×61 + 5×60
=1×216 + 4×36 + 5×1
=216 + 144 + 5
=365(10)
となって確かに正しい。10進数から他進数に変換するほうが簡単だ。ただし最後に余りを逆さまに見ることに注意が必要だ。なぜなら、1回めの割り算で6進数の1桁目を求めていたからだ。2回めの割り算で2桁目、3回めの割り算で3桁目と…。これさえ掴めていれば、何も逆さまに見ることを気にしないでも正しい値が得られることだらう。

おわりに…
今回の記録では進数が何者なのか?を説明し、それぞれの変換方法についても記録した。日常で使っている数字は、10進数という数の数え方の一種類に過ぎない。だいたいの人間の指の数は両手で10本。人間にとって、10を塊として見る10進数という数え方は一番使いやすいのだ。しかし過去を振り返ってみると、最初人間は2進数を使って数を数えていたのだという。そこまで大きな数を数える必要のなかった時代だ。2種類の状態を刻めれば数を数えられる2進数は、こんにちではコンピュータに応用されている。次回は、この2進数がコンピュータの中でどのように扱われているか(処理されているか)を見てみよう。では。

9065970742868106163 http://www.storange.jp/2013/03/01.html http://www.storange.jp/2013/03/01.html 進数 | ディジタルロジック01 2013-03-28T21:50:00+09:00 http://www.storange.jp/2013/03/01.html Hideyuki Tabata 200 200 72 72