[情報数学]進数変換の方法とツール

スポンサーリンク

日常生活において、私達が最もなじんでいる数え方は10進数だと思います。

しかし、今回はコンピュータを扱う上では学ぶべき数の数え方である2進数に加え、\(A\)から\(F\)を用いた16進数、それ以外の任意の数を数えるn進数の考え方、変換方法などを説明します。

チョロ
チュ?(進数変換?)
モナ
そうニャ。進数(進法)については前に勉強したと思うけど、今回は2進数から10進数だとか、10進数から16進数への変換方法を勉強するニャ!
[基礎数学]数の種類(自然数・整数)
プロローグチューチュー。どうしたニャ?チュウ(この数字の左についた横棒は何チュウ)?それはマイナスを意味するニャ。チュチュ?(マイナス?)そうニャ。それニャら今回はマイナスを中心に普段みている自然数以外の数も見て行くニャ!数の種類私たちが普段の生活で...
チョロ
チュチュ!(分かったでチュ!)

10進数について

10進数は普段私達が使っている数で非常に馴染み深い数ですが、2進数、16進数などに変換するには改めて10進数を理解する必要があります。

数字を\(0、1、2、・・・7、8、9\)と数えていくと\(9\)の次に桁が上がって\(10\)になります。

そして\(10、11、12、・・・97、98、99\)と数えていくと\(99\)の次に桁が上がり\(100\)になりますよね。

この\(1\)が\(10\)個集まって\(10\)になったときは\(10\)が\(1\)回ということで、\(10^{1}\)

\(10\)が\(10\)個集まって\(100\)になったときは\(10\)が\(2\)回ということで、\(10^{2}\)のように表すことが出来ます。

このように、数字が\(10\)個集まって桁が一つ上がることを\(10\)を基数にしていると言います。

分かりやすい例で挙げると、\(2018\)の場合、\(10^{3}\)が\(2\)個、\(10^{2}\)が\(0\)個、\(10^{1}\)が\(1\)個、\(10^{0}\)が\(8\)個集まったものと考えることが出来ます。

2進数・16進数のおさらい

2進数

2進数はその名の通り、「\(0\)」と「\(1\)」の2つの数字だけを扱います。

\(0\)の次は\(1\)になりますが、\(1\)の次は\(2\)ではなく、桁が上がって\(10\)となるわけですね。

このように\(2\)を基数としたものを2進数と呼び、2倍ごとに桁が上がっていくことが分かります。

例を挙げるなら\(10010\)であれば、\(2^{4}\)が\(1\)個、\(2^{3}\)が\(0\)個、\(2^{2}\)が\(0\)個、\(2^{1}\)が\(1\)個、\(2^{0}\)が\(0\)個集まったものと考えることが出来ます。

ちなみに10進数と2進数の対応表は以下のようになります。

10進数 0 1 2 3 4 5 6 7
2進数 0 1 10 11 100 101 110 111
10進数 8 9 10 11 12 13 14 15
2進数 1000 1001 1010 1011 1101 1110 1111 10000

16進数

16進数は今度、\(16\)を基数として数える方法です。数字では\(0\)から\(9\)までしか扱えないので、それに加えて\(A\)から\(F\)の6つのアルファベットを加えて\(16\)の数字とします。

\(9\)の次が\(10\)にならずに\(A、B、・・・\)と増えて行き、\(F\)の次に初めて\(10\)となります。

それ以降も同様で、\(9F\)の次が\(100\)になるのではなく、\(FF\)の次が\(100\)になる点も注意しましょう。

10進数との対応表は以下の様になります。

10進数 0 1 2 3 4 5 6 7
16進数 0 1 2 3 4 5 6 7
(10) 8 9 10 11 12 13 14 15 16
(16) 8 9 A B C D E F 10

その他の進数

2進数や16進数以外にも身の回りにはいくつも進数が存在しています。

例えば\(1\)日は\(24\)時間なので24進数。\(1\)時間は\(60\)分なので60進数のように考えることが出来ます。

進数の変換計算が難しいと思われるかもしれませんが、実は簡単で、例えば\(5\)時間は何分?と聞かれたら大抵の方は即答できるのではないでしょうか。

\(60\)分の塊が5つなので\(300\)分ですね。

その他の進数変換も似たようなので次の項で見ていきましょう。

変換方法

n進数から10進数

まずはn進数から10進数へ変換する方法です。

\(n\)は自然数(Natural number)の頭文字で、任意の自然数を入れて良いとしましょう。

\(n\)進数の場合、各桁に\(n\)個の塊がいくつあるかを見ていくことになります。

10101がn進数の場合、は\(n^{4}\)が\(1\)個、\(n^{3}\)が\(0\)個、\(n^{2}\)が\(1\)個、\(n^{1}\)が\(0\)個、\(n^{0}\)が\(1\)個集まったものになります。

具体的にnに値を放り込んで見ましょう。10101が2進数だとすると、10進数で表した場合は\(2^{4}\)が\(1\)個、\(2^{3}\)が\(0\)個、\(2^{2}\)が\(1\)個、\(2^{1}\)が\(0\)個、\(2^{0}\)が\(1\)個なので、

\begin{eqnarray}&&2^{4} \times 1 + 2^{3} \times 0 + 2^{2} \times 1 + 2^{1} \times 0 + 2^{0} \times 1
\\&=& 16 + 0 + 4 + 0 +1
\\&=& 21\end{eqnarray}

となります。

次に10101が16進数だとすると、10進数で表した場合は\(16^{4}\)が\(1\)個、\(16^{3}\)が\(0\)個、\(16^{2}\)が\(1\)個、\(16^{1}\)が\(0\)個、\(16^{0}\)が\(1\)個なので、

\begin{eqnarray}&&16^{4} \times 1 + 16^{3} \times 0 + 16^{2} \times 1 + 16^{1} \times 0 + 16^{0} \times 1
\\&=& 65536 + 0 + 256 + 0 +1
\\&=& 65793\end{eqnarray}

となります。

同じような要領で\(n\)に任意の数字を代入すればその進数を10進数に変換したときの値を求めることが可能です。

10進数からn進数

次に10進数をn進数に変換する方法です。

こちらは10進数の中にいくつnの塊を作ることが出来るか考える必要があります。つまりは\(n\)で割っていけば良いわけです。

そしてもう一つ着眼すべきは余りで、これがその塊を作ったときにいくつその塊があるかを知る手がかりになります。

こちらはn進数から10進数を求める以上に考えるとこんがらがるので機械的に計算できるようになりましょう。

求め方としては元の10進数\(D\)を\(n\)で割り、商を\(a_{1}\)、余りを\(b_{1}\)。次に商の\(a_{1}\)を再び\(n\)で割り、商を\(a_{2}\)、余りを\(b_{2}\)としてその作業を商の値が\(n\)の値より小さくなるまで続けます。

図に描くとこんな感じです。

そしてこれを\(a_{m}\)から図のように羅列します。

\(a_{m}b_{m-1}・・・b_{2}b_{1}\)が10進数に変換した値になります。

これでもぶっちゃけ分かりづらいので具体的な数字を入れてしまいましょう。

10進数の数字を\(1000\)として、これを16進数にしたい場合をやってみましょう。

上の図で言うところの\(D\)に\(1000\)を、\(n\)に\(16\)を代入します。

すると図のようになります。

従って矢印の方向に読めばいいのですが、16進数で\(14\)は\(E\)となるので、その点に留意して\(3E8\)が正解となります。

他の進数の場合も割る値を\(n\)に代入してやれば同様にして求めることが可能です。

変換ツール

任意の進数のテキストボックスに適当な数字を入れて変換ボタンを押すと、それぞれの進数に対応する値が表示されます。

また、数字以外の文字やその進数内に収まりきらない値を入れるとNaNと表示されます。(時々バグるので、露骨におかしい数字は入れないでください。)

10進数

2進数

16進数

まとめ

今回は進数変換に関する話しになりました。

特に2進数や16進数はコンピュータの世界では必須の考え方なので、プログラマやシステムエンジニアを目指す方は絶対にマスターしましょう。

チョロ
チュ~(慣れない考え方だから難しいでチュ)
モナ
理解するのも大事だけど、最初は手を動かして覚えるのが一番いいニャ。
スポンサーリンク

投稿者: TS

ゲームと数学のことを主に書いてます! アドバイスやご指摘があれば是非お願いします!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA