見出し画像

2進数、8進数、10進数、16進数、ついでに60進数のお話

今回は、タイトルにある通り、2進数、8進数、10進数、16進数についてお話したいと思います。

60進数については、あくまでオマケです。

数を表現する方法は、実はたくさんあります。

我々が現在、一般的に使用しているのは、10進法で表された10進数です。

その10進数の数字は、アラビア数字(算用数字)、ローマ数字、漢数字などで表現されていますね。

でも今回は、数字の表し方ではなく、数の表し方のお話です。
(数字と数は、意味が違うのですが、また別の機会にお話できればと思います。)

数の表し方は、実は他にもたくさんあり、特にコンピュータの世界では、10進数とは違う方法で扱われています。

それでは、10進数とは違う表現方法について、お話していきたいと思います。

n進数(n進法)の考え方

数を表現する方法として、「n進法」という考え方があります。

 ・n個の数字で、数を表現する
 ・n個で表現できなくなったら、桁上がりする
 ・各桁に「重み」が割り当てられている

簡単にルールを説明するとこんな感じです。
各桁(位:くらい)に重みが割り当てられていることから、「位取り記数法」とも呼ばれています。

実際にどのように表現するのかは、次項から説明していきたいと思います。

10進数について

幼稚園、小学校で習う数の数え方が、10進法です。

10進法で表現された数が、10進数になります。

10進数は、0〜9までの10個の数字で表し、9の次の数は、桁上がりして、10と表現されます。

画像1

この場合、

1000 × 1 + 100 × 2 + 10 × 4 + 1 × 7 = 1247

となります。

この考え方が全てのn進数に当てはまります。

2進数について

2進数は、2つの数字のみで表す数ということになります。

10進数で説明した、1247という数を2進数で表してみます。

画像4

1024 + 128 + 64 + 16 + 8 + 4 + 2 + 1 = 1247

2進数で表すと、1247 = 10011011111 となり、

11桁にもなってしまいました。

私たちが日常で使うには、とても不便ですね。

この記数法は、主にコンピュータの内部で扱われます。

電気信号がオンの時に、1
オフの時に、0

という風に扱うことで、電気信号を数に置き換えることが可能となります。

8進数について

8進数もコンピュータの世界で主に扱われる記数法です。

0〜7までの8個の数字で表す数え方になります。

2進数と同様に、10進数の1247を8進数で表してみましょう。

画像2

512 × 2 + 64 × 3 + 8 × 3 + 1 × 7 = 1247

8進数では、1247 = 2337 となり、

2進数と比べると、だいぶ10進数に近くなりましたね。

それでも、10進数で生活している私たちには、扱いづらい表現方法ですよね?

これは、2進数との相性が良く、8進数は、2の3乗進数と考えることができます。

後ほど相性が良い理由もお話していきます。

16進数について

16進数も8進数と同様、コンピュータの世界で頻繁に扱われる記数法です。

16個の数字で表し、16になったら桁上がりする仕組みです。

ここで問題になるのが、16個の数字ってどうやって扱うの?

数字って、0〜9の10個しかありませんよね?

16進数では、0〜9の他に、A、B、C、D、E、F というアルファベットを数字として扱います。

それぞれのアルファベットは、

A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

として扱うことと定義しています。

それでは、これまでと同様に、10進数の1247を16進数で表してみましょう。

画像3

256 × 4 + 16 × 13 + 1 × 15 = 1247

16進数では、1247 = 4DF となります。

10進数よりも桁数が少なくなりました。

これも8進数と同じで、2進数と相性が良いのです。

その理由も次項でお話したいと思います。

それぞれの変換方法

10進数、2進数、8進数、16進数について、それぞれ説明致しました。

ここでは、それぞれの記数法同士で変換する方法をご紹介していきます。

この変換方法は、中学受験の問題やコンピュータの試験などでも出題されるものになっています。

もしかしたら、どこかで役に立つかもしれません。

せっかくなので、この機会に覚えておくと良いと思います。

10進数を分解してみる
10進数の場合、1の位が何個、10の位が何個、というように各桁(重み)の箱にどれだけ入っているか?

で表すことができました。

例えば、先ほどの「1247」という10進数の場合、

10 )1247
10 ) 124・・・7
10 )  12・・・4
       1・・・2

10で順番に割り算していきます。

1247 ÷ 10 = 124 余り 7 となります。

次に、上記の商を10で割ります。

124 ÷ 10 = 12 余り 4

これを繰り返して、割れなくなるまで繰り返します。

最後に余りを下から順に並べていくと、1247となります。

10進数を2進数に変換
上記の分解方法を使うと、10進数を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進数に変換
2進数の場合は、2で割り続けましたが、8進数の場合はどうなるでしょうか?

同じように、8で割り続けていきます。

8 )1247
8 ) 155・・・7
8 )  19・・・3
      2・・・3

これを余りを下から順に並べると、2337となります。

10進数を16進数に変換
10進数から16進数に変換する場合も繰り返しになりますが、10進数の1247を16で割り続けていきます。

16 )1247
16 )  77・・・15
       4・・・13

この余りを順番に並べると、41315とはなりません。

13は、D
15は、F にそれぞれ変換して並べます。

すると、4DF と表すことができます。

2進数を8進数に変換
先ほど、2進数と8進数は、相性が良いとお話しました。

その理由ですが、8 は、2 × 2 × 2 と表すことができますね?

つまり、8 = 2の3乗 ということになります。

もう少し、分解してお話すると、

8進数は、0 〜 7 の8個の数字を使うのですが、それを2進数で表現すると、

0 〜 111 の数字で扱うことができる、ということになります。

1の位が、0 〜 111
8の位が、0 〜 111
64の位が、0 〜 111

で、それぞれ表現されるということです。

それでは、10進数 1247 の2進数、10011011111 を8進数に変換してみます。

まず、この2進数を3桁ずつ分けます。

10 011 011 111

この3桁ずつに分けたそれぞれを10進数に変換していきます。

なぜ10進数にするかというと、先ほど説明した、8個の数字は、0〜7でした。

これを0〜111として表現していたので、元に戻してあげる作業になります。

すると、

10 は、2進数で、2
011 は、2進数で、3
111 は、2進数で、7

となりますので、結果は、2337 となります。

逆に、8進数 2337 を2進数に変換する場合は、それぞれの数字を10進数の数字として2進数に変換していきます。

2進数を16進数に変換
16進数は、2の4乗進数とも言い換えることができますね。

8進数と同様に、0 〜 15 の数字は、2進数で、0 〜 1111 と表すことができます。

それでは、2進数 10011011111 を16進数に変換してみます。

まずは、4桁ずつに分けます。

100 1101 1111

これを10進数に戻してあげます。

100 は、4
1101 は、13 = D
1111 は、15 = F

となりますので、結果は、4DF となります。

逆に、16進数 4DF を2進数に変換する場合は、それぞれの数字を10進数の数字として2進数に変換していきます。

8進数を16進数に変換
最後に、8進数を16進数に変換する方法です。

8進数 2337 を16進数に変換する場合を考えてみます。

それぞれの数字を一度、3桁ずつの2進数に変換します。

2 は、010
3 は、011
3 は、011
7 は、111

これを並べると、010011011111 となりますね。

今度は、この2進数の結果を4桁ずつに分けます。

0100 1101 1111

あとは、2進数から16進数に変換する手順と同じです。

結果は、4DF となります。

逆に16進数から8進数への変換もまずは4桁ずつの2進数に変換した後で、3桁ずつに分けて変換してあげます。

オマケ:60進数について

実は、60進数という記数法は、小学生で既に勉強しており、日常でも使っています。

00〜59で1桁を表し、60になったら桁上がりをする数…

そう、時間です。

時間の数え方は、60進法で表されていたんですね。

59分から60分になったら、桁上がりして、1時間となります。

でも、24時間になったら、桁上がりして、1日となります。

つまり厳密に言うと、「分」が60進数で、「時」は24進数ですね。

Twitterでは大喜利企画、ブログでは読むラジオ、リアルではWEB屋の仕事をしています。 noteでは、WEBに関するお話や大喜利ファンクラブで話している内容を少しだけ紹介しています。