2進数、8進数、10進数、16進数、60進数について
2022.06.09
以前、noteで投稿して評判が良かった記事を再編集してご紹介します。
我々が現在主に使っている数は、10進法で表された10進数と言われるものになります。
アラビア数字、ローマ数字、漢数字などで表現されますが、いずれも10進数になっています。
これらは、数字と言う表現がされている通り、「数」を表現するための「文字」が「数字」ということになります。
数字の表現方法と言えば、上記のアラビア数字やローマ数字を指しますが、「数の表現方法」が10進数になります。
我々人間にとっては、10進数は理解しやすいものですが、コンピュータの世界では逆に扱いづらいものになっています。
コンピュータ内部では、2進数、8進数、16進数が使われてるので、コンピュータ関連のお仕事、特にプログラミングの仕事をする上では、理解しておきたい知識になります。
そこで今回は、この「数の表現方法」として、2進数、8進数、10進数、16進数、60進数についてお話ししたいと思います。
目次
10進数についておさらい
10進数や2進数を表現する方法を「10進法」「2進法」と言いますが、これらを総じて「記数法」と言います。
では、10進数って何?と聞かれたら、きちんと答えられますでしょうか?
パッとは答えられない方も多いと思います。
10進数は、0から9までの10個の数字を使って表した数で、9の次は桁上がりをして10と表します。
1000の位 | 100の位 | 10の位 | 1の位 |
---|---|---|---|
1 | 2 | 4 | 7 |
この例の場合、
1000×1 + 100×2 + 10×4 + 1×7 = 1247
となっており、各桁に何個分入っているという考え方が、この後ご紹介するn進数すべてに共通した考え方になります。
2進数について解説
前述の10進数では、10個の数字を使って表現していましたが、2進数では2個の数字を使って表現する記数法になります。
具体的には、0と1の数字のみを使って全ての数字を表現します。
1024 の位 | 512 の位 | 256 の位 | 128 の位 | 64 の位 | 32 の位 | 16 の位 | 8の位 | 4の位 | 2の位 | 1の位 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
1024 + 128 + 64 + 16 + 8 + 4 + 2 + 1 = 1247
2進数で1247を表すと、10011011111となり、11桁にもなってしまいます。
私たちが日常で使用する数としては、大変扱いにくいですね。
しかし、この2進数はコンピュータの内部で扱われています。
電気信号がオフの時に、0
オンの時に、1という値が扱われ、電気信号が数値として処理することができるようになっています。
8進数について解説
8進数は、コンピュータの世界、特にプログラミングを勉強している人以外には、あまり馴染みが無いかも知れませんが、これも2進数同様コンピュータの内部で扱われる記数法です。
0から7までの8個の数字で表しています。
512の位 | 64の位 | 8の位 | 1の位 |
---|---|---|---|
2 | 3 | 3 | 7 |
512×2 + 64×3 + 8×3 + 1×7 = 1247
1の位が7まで表現されますが、8以上になると桁上がりとなります。
この仕組みでいくと、10進数の1247は、2337と表現されます。
一見すると10進数と見分けがつかないので、日常生活では使いづらいですね。
これは、2進数との相性が良く、2の3乗進数と言い換えることもできます。
16進数について解説
16進数も8進数と同じく、コンピュータの世界でよく使われる記数法です。
CSSを勉強されている方やデザインを勉強されている方は、RGBカラーの数値として馴染みがあるかも知れません。
1の位には、0から9の数字と、AからFまでのアルファベットが用いられます。
1つの桁で16個の数字を表現するためには、数字だけでは足りないため、アルファベットで代用しているということです。
それぞれのアルファベットは、
A=10
B=11
C=12
D=13
E=14
F=15
として定義されています。
256の位 | 16の位 | 1の位 |
---|---|---|
4 | D | F |
256×4 + 16×13 + 1×15 = 1247
10進数と比べると、桁数も少なくなりますが、人間が理解するにはやはり不便になります。
こちらも8進数と同様に、2進数との相性が良いものとなっています。
それぞれの基数変換について解説
10進数を2進数に変換したり、2進数を8進数に変換したり、他の記数法に変換することを「基数変換」と言います。
基数とは、n進法で表記された数の各桁の重みに対して基準となるもので、10進法の場合は基数が10となります。
それぞれの変換方法について、詳しく紹介していきます。
基数変換は、中学受験やコンピュータ関連の資格試験などにも出題されるものなので、この機会にぜひ覚えてもらいたいです。
10進数を分解してみる
10進数の場合、1の位に何個、10の位に何個、という感じで各桁にいくつ入っているか(重みと言います)で表現されます。
先程の例ですと、1000の位の重みが1、100の位の重みが2、10の位の重みが4、1の位の重みが7ということになります。
10 )1247
10 ) 124・・・7
10 ) 12・・・4
1・・・2
このように、1247を10で割っていくと余りが出てきます。
その余りを下から繋いでいくと、1247となります。
10進数を基数変換する場合は、この考え方が大事になってきます。
10進数を2進数に変換
上記の方法を使うと、10進数の数を2進数に変換することができます。
2進数にする場合は、2で割っていきます。
2 )1247
2 ) 623・・・1
2 ) 311・・・1
2 ) 155・・・1
2 ) 77・・・1
2 ) 38・・・1
2 ) 19・・・0
2 ) 9・・・1
2 ) 4・・・1
2 ) 2・・・0
1・・・0
10進数の1247をこれ以上割れなくなるまで2で割り続けると上記のようになるので、余りを下から順に並べていくと、10011011111となります。
10進数を8進数に変換
8進数の場合も同様に、10進数の数を8で割り続けます。
8 )1247
8 ) 155・・・7
8 ) 19・・・3
2・・・3
これまでと同じように、これ以上割れなくなったら、余りを下から順に並べていくと、2337となります。
10進数を16進数に変換
10進数を16進数に変換する場合も同様に、16で割り切れなくなるまで続けていきます。
16 )1247
16 ) 77・・・15
4・・・13
ここで注意が必要なのですが、そのまま余りを下から並べると、41315となってしまいます。
余りが10以上の場合は、アルファベットに変換してから並べていきます。
そうすると、4DFと変換できます。
2進数を8進数に変換
では、2進数の数を8進数に変換するにはどうしたら良いでしょうか?
先述では、8進数は2進数と相性が良いとお話ししました。
8は、2の3乗で表すことができますよね?
8進数は、0から7の数字で表すことができますが、2進数に置き換えると、0から111で表すことができるということです。
1の位の重みは、0から111
8の位の重みは、0から111
64の位の重みは、0から111
という風に表現できます。
先ほどの2進数に変換した「10011011111」を3桁ずつ分けます。
「10 011 011 111」となります。
この3桁ずつに分けたそれぞれの数を10進数に変換します。
3桁の2進数なので、10進数に変換しても0から7に変換されるので、8進数に変換することが可能となります。
「10 011 011 111」を変換してみると、「2337」となります。
先ほど、10進数から8進数に変換した時と同じ結果になりましたね。
2進数を16進数に変換
それでは、2進数を16進数に変換する方法について説明していきます。
16進数も2進数と相性が良いとお話ししましたが、その理由は、16を2の4乗として表現することができるためです。
変換の仕方は、8進数の時と同じ考え方で、2進数の数を4桁ずつに分けて考えます。
「100 1101 1111」となるので、それぞれ10進数に変換します。
0から1111なので、10進数に変換すると「4 13 15」となります。
16進数に変換する場合はもう一手間必要で、10以上の数字をアルファベットに変換する必要があります。
変換すると、前述と同じ4DFとなりました。
8進数を16進数に変換
最後は、8進数を16進数に変換する方法です。
勘の良い方はお気づきかも知れませんが、この場合は一度2進数に変換してから16進数に変換するという方法を使います。
10進数の「1247」は、8進数では「2337」でした。
これを一度2進数に変換します。
各数字をそれぞれ2進数に変換していきます。
注意点としては、それぞれ3桁の2進数に変換するということです。
2=010
3=011
3=011
7=111
これを上から順に並べると2進数に変換できます。
先頭の0は省略できるので「10011011111」となります。
あとは、2進数を16進数に変換するので、4桁に分割してそれぞれ10進数に変換し、アルファベットに置き換えます。
逆に、16進数から8進数に変換する場合も、一度2進数に変換してから行うことで対応できます。
60進数は特殊だけど日常で使われている!?
これまで紹介してきた2進数、8進数、16進数は、コンピュータで扱われているものなので、ある意味特殊な記数法と言えます。
ここで紹介するのは、「60進数」と「24進数」です。
あまり聞き馴染みないと思いますが、実は日常生活で当たり前のように使われているものです。
ピンと来た方もいると思いますが、そうです、時間です。
0秒から59秒までカウントし、60秒になると1分に繰り上がります。
さらに59分までカウントされて、60分になると1時間に繰り上がっていきます。
桁が繰り上がると同時に単位も変わってしまいますが、考え方としては60進法が使われています。
1時間からさらに24時間になると、1日という単位に繰り上がります。
分と秒は、60進数ですが、時間は24進数と言えます。
この考え方でいくと、日は365進数ということになりますね。
まとめ
今回は、以前noteで投稿した内容を再編集してご紹介していきました。
日常的に使われている10進数は、0から9までの10個の数字を使って表現する方法でした。
2進数、8進数、16進数は、コンピュータ内部の処理で扱われる記数法で、特にプログラミングを勉強している人には覚えてもらいたい知識になります。
2進数では、0と1の2個の数字、8進数では、0から7までの8個の数字、16進数では、0から9までの数字とAからFまでのアルファベットが使われています。
それぞれの記数法に変換するには、一度10進数や2進数に変換してから8進数や16進数に変換するという方法が使われます。
10進数以外にも、日常的に使われているものに、60進数と24進数があります。
これは、時間や分、秒を表す時に用いられますが、他の記数法とは若干意味合いが違うかも知れません。
WEB制作を勉強されている方は、CSSのcolorプロパティなどで、color: #f0c3ff;
のように16進数が使われているので、ぜひ覚えておいてもらいたいです。