「n進数」①　10進数・2進数・8進数・16進数の仕組み

##n進数とは
桁が上がることを示す数字のこと。

##10進数
たとえば、私たちが普段使っているのは、
0〜9までの10個の数字を使った**10進数**です。
しかし、この10個の数字1文字（1桁）で表現できるのは最大で「9」までです。

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|

###桁上がりで9より大きな数を表現する
そこで、9の次の数を表現するために、**桁上がり**という操作を行います。
桁上がりとは、元の桁（1桁目）が**0**になり、上の桁（2桁目）に**1が加算される**ことを意味します。
これによって、9の次の数である「**10**」という数を表現することができるようになりました。

| 2桁目 | 1桁目 |
|:-:|:-:|
|   |   9|
|  1 |   0|


###桁上がりで99より大きな数を表現する
次に、「**99**」という数について着目します。この数は2桁で表すことができる最大の数です。
この次の数を表現する時には、9の時と同様に桁上がりをします。
まず、１桁目の9が桁上がりをすると、2桁目の数9に**1が加算**されます。
すると、2桁目でも9より大きな数を表現することができないため、桁上がりが起きて3桁目に1が加算されて「**100**」になります。

| 3桁目 | 2桁目 | 1桁目 |
|:-:|:-:|:-:|
|   |   9|   9|
|   1|   0|   0|

そして、数が10倍、100倍…といった形で**10の累乗**になるごとに桁数が1ずつ増えます。


|桁数|最小の数|最大の数|
|:-:|:-:|:-:|:-:|:-:|
|1桁|0|9|
|2桁|10（10の1乗の時）|99|
|3桁|100（10の2乗の時）|999|
|4桁|1000（10の3乗の時）|9999|
|…|…|…|

このように、0〜9までの数を使ってある桁数の数を表現する時に、各桁における最大の数「9」よりも大きな数を、桁上がりによって表す方法のことを**10進法**と呼びます。

##コンピューターが扱う2進数
大まかに、コンピューターは電気ののON・OFFという2種類の状態があり、
それに対応する形で「**1**」と「**0**」の数字が使われています。
しかし、「**1**」と「**0**」の2種類を使うだけでは単純な内容を処理することしかできません。

||ON|OFF|
|:-:|:-:|:-:|
|数字|1|0|

これは、先ほどの10進数における0〜9までの数字しか使うことが出来ないのと同様の状態です。
そこで、表現できる数字の範囲を増やすため、10進数と同じように桁上がりを利用します。
ここで利用されるのが**2進数**と呼ばれる表現方法です。

##2進数の仕組み
###2進数の桁上がり
2進数において、1桁で表すことのできる最大の数は1です。
そして、1の次にあたる数字が無いため、桁上がりで次の数を表現します。
その場合、元の桁は0になり、上の桁に1が加算されます。
だから、「1」の次は「10」になります。

| 10進数の値|| 4桁目 | 3桁目 | 2桁目 | 1桁目 ||桁上がり|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|   0||   |   |   |   0|
|   1||   |   |   |   1|
|   ２||   |   |   1|   0||←桁上がり|
|   3||   |   |   1|   1|
|   4||   |   1|   0|   0||←桁上がり|
|   5||   |   1|   0|   1|
|   6||   |   1|   1|   0||←桁上がり|
|   7||   |   1|   1|   1|
|   8||   1|   0|   0|   0||←桁上がり|
|   …||   …|   …|   …|   …|||

2進数の桁上がりのタイミングについて注目すると、
2進数の値が**2つ増えるごとに起きている**ことが分かります。
そして、2進数の値が**10進数における2の累乗**になるごとに1ずつ桁数が増えています。

|桁数|最小の数|最大の数|
|:-:|:-:|:-:|:-:|:-:|
|1桁|0|1|
|2桁|10（10進数で2の1乗の時）|11|
|3桁|100（10進数で2の2乗の時）|111|
|4桁|1000（10進数で2の3乗の時）|1111|
|…|…|…|

このように、0と1の数を使ってある桁数の数を表現する時に、各桁における最大の数「1」よりも大きな数を、桁上がりによって表す方法のことを**2進法**と呼びます。

##8進数
8進数では**0〜7までの8つの数字**を使って数を表現します。

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
8進数において、1桁で表すことのできる最大の数は**7**になります。
そして、7の次にあたる数が無いため、桁上がりで次の数を表現します。
だから、「7」の次は「10」になります。

| 10進数の値|| 3桁目 | 2桁目 | 1桁目 ||桁上がり|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|   0||   ||   0|   ||
|   1||   ||   1|   ||
|   …||   ||   …|   ||
|   6||   ||   6|   ||
|   7||   ||   7|   ||
|   8||   |１|   0|   |←桁上がり|
|   9||   |1|   1|   ||
|   …||   …|…|   …|   ||
|   62||   |7|   6|   ||
|   63||   |7|   7|   ||
|   64||   1|0|   0|   |←桁上がり|
|   …||   …|…|   …|   ||

8進数の桁上がりのタイミングについて注目すると、
8進数の値が**8つ増えるごとに起きている**ことが分かります。
そして、8進数の値が**10進数における8の累乗**になる毎に1桁ずつ桁数が増えています。

|桁数|最小の数|最大の数|
|:-:|:-:|:-:|:-:|:-:|
|1桁|0|7|
|2桁|10（10進数で8の1乗の時）|77|
|3桁|100（10進数で8の2乗の時）|777|
|4桁|1000（10進数で8の3乗の時）|7777|
|…|…|…|

このように、0〜7までの数を使ってある桁数の数を表現する時に、各桁における最大の数「7」よりも大きな数を、桁上がりによって表す方法のことを**8進法**と呼びます。

##16進数
16進数では0〜9までの10個の数字とアルファベットA〜Fの6つの数字を使って数を表現します。

|0| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|

16進数において、1桁で表すことのできる最大の数はFになります。
そして、7の次にあたる数が無いため、桁上がりで次の数を表現します。
だから、「F」の次は「10」になります。

| 10進数の値|| 3桁目 | 2桁目 | 1桁目 ||桁上がり|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|   0||   ||   0|   ||
|   …||   ||   …|   ||
|   8||   ||   8|   ||
|   9||   ||   9|   ||
|   10||   ||   A|   ||
|   11||   ||   B|   ||
|   …||   ||   …|   ||
|   15||   ||   F|   ||
|   16||   |1|   0|   |←桁上がり|
|   …||   |…|   …|   ||
|   159||   |9|   F|   ||
|   160||   |A|   0|   |←桁上がり|
|   …||   |…|   …|   ||
|   255||   |F|   F|   ||
|   256||   1|0|   0|   |←桁上がり|
|   …||   …|…|   …|   |…|

16進数の桁上がりのタイミングについて注目すると、
16進数の値が**16増えるごとに起きている**ことが分かります。
そして、16進数の値が16の累乗になるごとに1桁ずつ桁数が増えています。

|桁数|最小の数|最大の数|
|:-:|:-:|:-:|:-:|:-:|
|1桁|0|F|
|2桁|10（10進数で16の1乗の時）|FF|
|3桁|100（10進数で16の2乗の時）|FFF|
|4桁|1000（10進数で16の3乗の時）|FFFF|
|…|…|…|

このように、0〜Fまでの数を使ってある桁数の数を表現する時に、各桁における最大の数「F」よりも大きな数を、桁上がりによって表す方法のことを**16進法**と呼びます。

##参考にさせて頂いた書籍
きたみりゅうじ 『キタミ式イラストIT塾 基本情報技術者平成31/01年』 技術評論社 2019年

##学習してみて
日常的に10進数を使っているので、なかなかこれらの数の表現に慣れるのは難しいですね。
16進数はコンピュータだけでなく色彩の表現にも使われているそうです。
次回は2進数・8進数・16進数の関係性や変換についてまとめたいと思います。