2進数・8進数・10進数・16進数の相互変換 |
少しでも、コンピュータの勉強をしたことのある人は2進数や16進数というのを聞いたことがあると思います。
でも、どんなものかを知っている人は意外に少ないようです。
ここでは、私たちが普段の生活で使っている10進数(1〜9までを数えたらその次、10個目の数は桁上がりするので10進数と言う)を2進数や16進数に変換してみましょう。 |
2進数や8進数、16進数ってどんなもの?
2進数:数を数えていく時「1」の次に桁上がりが発生するような数字になります。
具体的には、0、1・・・・と数えていった時、1の次が2にはならずに桁上がりが発生するような数字になりますので、0、1、10、11、100、101、110、111・・・・というように数が増えて行きます。
この時「100」の数字は「ひゃく」と言ってはだめです。「ひゃく」というと10進数になってしまいます。2進数の「100」は「いち・ぜろ・ぜろ」といいます。
8進数や16進数の時もおなじように数字を個別に言いますので気をつけてください。
とは言っても、紙に書いてある場合なんかだと区別がつかないので、2進数なら「100b」、16進数なら「100h」という様に数字の後ろ(場合によっては前)にアルファベットを付けて区別をします。
|
各数字の対応 |
10進数 |
2進数 |
8進数 |
16進数 |
0 |
00000 |
0 |
0 |
1 |
00001 |
1 |
1 |
2 |
00010 |
2 |
2 |
3 |
00011 |
3 |
3 |
4 |
00100 |
4 |
4 |
5 |
00101 |
5 |
5 |
6 |
00110 |
6 |
6 |
7 |
00111 |
7 |
7 |
8 |
01000 |
10 |
8 |
9 |
01001 |
11 |
9 |
10 |
01010 |
12 |
A |
11 |
01011 |
13 |
B |
12 |
01100 |
14 |
C |
13 |
01101 |
15 |
D |
14 |
01110 |
16 |
E |
15 |
01111 |
17 |
F |
16 |
10000 |
20 |
10 |
図-1
|
|
図-1は各進数と10進数の対応を記載した表です。
それぞれの進数の特徴を良く覚えておいてください。
特に10進数の10〜15が、16進数ではA〜Fになるのは覚えておいて下さい。
10進数と2進数や8進数、16進数の対応は図-1の通りなのですが、0から16ぐらいまでなら、記憶することも可能ですが、それ以上の数になった時、たとえば「10進数の981を2進数に変換しなさい」なんていう問題が出てきた場合は表の丸暗記では対処できないですね。
それでは、2進数と10進数の相互変換をやってみましょう。
まず2進数から10進数への変換。
「2進数の「10001110」を10進数に直しなさい。」という問題があったとしましょう。
2進数から10進数にする場合、2進数の右から数えて何桁目が「1」になっているか(いちばん右は0桁目としてカウント)を調べます。
上の例だと、それぞれ「1」、「2」、「3」、「7」桁目が「1」になっています。
2進数を10進数に直す場合、何桁目が「1」になっているのかを調べた後、2の「桁数」乗で計算した値を全て足せば良いだけなのです。
上の例だと、 を計算して全てを足すと、128+8+4+2となって、答えは、「142」と求めることができます。
2進数のそれぞれの桁は右から というようになっていますので、数字が「1」になっているところだけ、 を計算して足して行きます。
具体的には といった具合に対応しています。 |
|
この計算方法は、何進数であっても同じで、たとえば8進数なら、各桁は右から に、対応しています。
ただし、8進数の場合は2進数と違って0〜7の数字を使いますので、各桁の数値に を掛けてから全ての値を足します。
例えば8進数の「276」であれば で、128+56+6になりますので、10進数に直すと「190」になります。 |
10進数から2進数の変換方法。
それでは、検算の意味もかねて、先ほどの10進数「142」を2進数にしてみましょう。
|
 |
「142」 を 「2」で割っていき、最終的に割ることができなくなるまで計算し、割り切れたところは「余り0」、割り切れなかったところは「余り1」というように、余りの数字を並べていきます。
そして、最終の答え(必ず「1」になります)から左図の矢印のように、数字を並べていくと「10001110」という具合に、2進数が出来上がり、これが答えになります。
|
これは、8進数であっても同様で、「8」で割っていき、同じように余りの数字と最後の答え(割ることができなくなった数字で「7」以下で「1」以上の数字になります。)を並べることによって、8進数が出来上がります。 |
 |
上で8進数から10進数の時に計算した10進数の「190」を8進数に直してみます。
左のように10進数から2進数へ変換の時と同じように、割り算していけば答えは簡単に出ます。 |
|
16進数について。
相互変換の方法は、2進数や8進数の時と同じで構いません。
注意する点は、「10」〜「15」までの10進数が16進数ではアルファベットの「A」〜「F」に対応しているという点だけです。 |
8進数、16進数への変換(おまけ)
上の表で何か気が付いたことはありませんか?
たとえば2進数と8進数のところ・・・・2進数の「000」〜「111」が8進数の「0」〜「7」、「1000」〜「1111」が「10」〜「17」、さらに桁が上がるとどうなるか、2進数の「111000」〜「111111」は8進数だとどうなると思います?
もうわかっている人もいるかと思いますが、8進数だと「70」〜「77」になります。
2進数を8進数に変換する時、元になる2進数を右から「3桁」ずつ区切って「0」〜「7」の数字に変えてやるだけで、2進数が8進数になります。
同じように、2進数を「4桁」ずつ区切って、「0」〜「F」に変換すると16進数に変わります。
だから、基本的には10進数と2進数の相互変換だけを覚えておけば、8進数や16進数に簡単に変換することができます。
もうひとつおまけ
2進数1桁のことを「bit(ビット)」といい、2進数が8桁並んだものを「Byte(バイト)」といい、一般にシリアル通信(ADSLやFTTH、LANなど)では「bit」、パラレル通信では「Byte」の単位を使用します。
コンピュータ用語で出てきますので覚えておきましょう。
ADSLなんかで下り最大24Mbpsとか書かれているは、1秒間に24メガビットの信号(2進数1桁の「0」、「1」の情報)が受け取ることができますよっていうことですが、これをパソコンなどでハードディスク容量などの容量表示に使われている「バイト」に変換する場合は、24メガビットを「8」で割ると変換することができ、このケースだと1秒間に最大3メガバイトのデータを受信することができるということになります。 |
 |