【基本】n進法への変換(整数)

ここでは、10進法で表された整数を $n$ 進法で表す方法を見ていきます。

【広告】

10進法への変換

【基本】n進法で見たように、 $n$ 進法とは、 $n^k$ の位を用いた数字の表し方です。2進法で $1011_{(2)}$ と表された数は、10進法では\[ 1\times 2^3+0\times 2^2+1\times 2^1+1\times 2^0 \]のことで、計算すると11だとわかります。

10進法へ変換する場合は、このように、各位の数字と $n^k$ とを掛け、それらを足し合わせれば求めることができます。もう一つ、7進数で例を挙げると、 $123_{(7)}$ は、10進法で表すと\[ 1\times 7^2+2\times 7^1+3\times 7^0=66 \]となります。

10進法への変換は、まだわかりやすいですが、逆への変換は少し難しいです。次で見ていきましょう。

n進法への変換

今度は逆に、11を2進数で表すことを考えてみましょう。まず1つパッと思いつくものは、1から順番に書いていく方法でしょう。2進数で数字を順番に書いていくと、 1,10,11,100,101,… となっていくので、11 は $1011_{(2)}$ と書けることがわかります。しかし、これだと数が大きくなるととても面倒になります。

もう少し簡単な方法でないと厳しいですね。そこで、もう一度、使い慣れた10進法での数字を見直してみることにしましょう。

10進法で書かれた、5678 という数について考えます。この一の位は 8 ですが、8を求めるにはどうすればいいかというと、10で割った余りを求めればいいですね。

次に、十の位の 7 はどうすれば求められるでしょうか。先ほどと同じ感覚で100で割っても、うまくはいきません。これは、10で割ったときの商を、もう一度10で割って余りを求めればいいですね。

百の位の 6 は、さきほどの商を、もう一度10で割って余りを求めればいいですね。千の位の 5 は、同じ流れで考えると、1000で割ったときの商を、もう一度10で割った余りとなります。

つまり、

  • 10で割る
  • 余りを一番下の位に書く
  • 商を10で割る
  • 余りを次の位に書く
  • 商を10で割る
  • 余りを次の位に書く

この繰り返しで、求められます。10進法以外の場合も、同じようにやってみましょう。

11を2進法で書くことを考えてみます。2で割ると、余りは1で商は5です。なので、一番右の位に1を書きます。次に、商5を2で割ると、余りは1で商は2です。なので、その左に1と書きます。商2を2で割ると、余りは0で商は1です。よって、左に0と書き、その左に0と書けば、\[ 1011_{(2)} \]となります。実際、これを10進法に戻すとあっていることがわかりますね。

手順はこれでよさそうですが、これは具体的に何をやっているのでしょうか。もう少し詳しく見ていきましょう。

2進法というのは、 $2^k$ の位で考えるのでした。そのため、 $11\lt 2^4$ であることを踏まえると、2進法で表した場合の桁数は、最大でも4であることがわかります。なので、 $abcd_{(2)}$ と書けたとする( $a,b,c,d$ は0か1 )と、\[ 11=a\times 2^3+b\times 2^2+c\times 2^1+d\times 2^0 \]が10進法の世界で成り立つことになります。

この右辺で、2で割った余りを考えると、 $2^3$ から $2^1$ までは2の倍数なので、 $d$ だけが残ることになります。なので、この余りを、一番右の桁に書けばいいんですね。次に、 $2^1$ の位についてですが、右辺を2で割ったときの商は、 $d$ 以外の部分を除いて実際に2で割ると\[ a\times 2^2+b\times 2^1+c\times 2^0 \]となります。なので、2で割った余りは $c$ となり、これを $d$ の左の桁に書けばいいことがわかります。後は同じ流れです。これを2で割ったときの商は\[ a\times 2^1+b\times 2^0 \]となり、さらに2で割ったときの余りが $b$ で、商が $a$ となります。

この計算で出てくる「 $2^k$ で割ったときの商」は、 $2^k$ 以上の項だけを考えることになります。これを $2$ で割った余りを考えれば、 $2^k$ の係数だけが残る、という仕組みになっています。

このことを、次のような計算で求める人もいます。
\begin{eqnarray}
& & 2 \underline{ ) 11 } \\
& & 2 \underline{ ) \ 5 } \cdots 1 \\
& & 2 \underline{ ) \ 2 } \cdots 1 \\
& & 2 \underline{ ) \ 1 } \cdots 0 \\
& & \quad \ 0 \cdots 1 \\
\end{eqnarray}まず1行目に11を書いて、それを2で割ったときの商と余りをその下に書きます。以下、割れなくなるまで繰り返します。一番上の余りが一番右の位に来て、一番下の余りが一番左の位にきます。なので、余りの部分(…の後の数字)を下から順番に並べて $1011_{(2)}$ と書く、ということです。

2進法で見てみましたが、底が他の場合でも同じです。例えば、66 を7進法で表したい場合、66を7で割った余りが 3 なので、 $7^0$ の位は3、この商9をもう一度7で割ると余りが2なので、 $7^1$ の位は2で、商が1だから $7^2$ の位は1となり、\[ 66=123_{(7)} \]となることがわかります。

おわりに

ここでは、10進法で書かれた整数を $n$ 進法に変換する方法を見ました。 $n$ で繰り返し割り、余りを計算していく、という方法で求められます。10進法への変換の方がわかりやすいので、自信がなければ再度変換して元に戻るかを確認するようにしましょう。