この記事では、「\(n\) 進法」(\(10\) 進法・\(2\) 進法・\(16\) 進法・\(60\) 進法など)についてわかりやすく解説していきます。
別の進数への変換方法や計算問題の解き方も説明していくので、ぜひこの記事を通してマスターしてくださいね。
目次
n 進法とは?
\(n\) 進法とは、\(n\) 種類の文字で数を表現する方法です。
\(n\) 種類の文字で数を表現する記数法の総称。
\(n\) 進法では、底 \(n\) の累乗が位取りの基本となる(\(n^0\) の位が \(1\) 桁目に対応)。
私たちは普段 \(10\) 進法で数を数えていますが、別に「\(10\)」にこだわる必要はまったくありません。
昔の人が \(3\) 種類の文字を使うと決めたら \(3\) 進法、\(40\) 種類の文字を使うと決めたら \(40\) 進法が統一的なルールになっていたでしょう。
\(n\) 進法のうち、よく使われるものについて見ていきましょう。
10 進法
「\(\color{red}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}\)」の \(10\) 種類の文字で数を表現し、\(10\) の累乗ごとに位が上がります。
国際単位系(SI)でも \(10\) 進法が採用されており、私たちが今まで習ったほとんどの計算規則は \(10\) 進法を前提としています。
\(10\) 進法がメジャーとなったのには、人間の指の本数が \(10\) 本であることが理由の \(1\) つと言われています。
2 進法
「\(\color{red}{0, 1}\)」の \(2\) 種類の文字で数を表現し、\(2\) の累乗ごとに位が上がります。
\(2\) 進数はコンピュータの計算処理に用いられています。
ON、OFF の切り替えなど、\(2\) 値である方が構造を単純化できるためです。
16 進法
「\(\color{red}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \mathrm{A}, \mathrm{B}, \mathrm{C}, \mathrm{D}, \mathrm{E}, \mathrm{F}}\)」の \(16\) 種類の文字で数を表現し、\(16\) の累乗ごとに位が上がります。
\(16\) 進法も、コンピュータ、特にプログラミングなどで使用されます。
コンピュータにとっては \(2\) 進数に変換しやすく、人にとっては桁数が少なく見やすいといった利点があります。
60 進法・12 進法
時間の単位「秒 \(\text{s}\)」「分 \(\text{min}\)」では位取りの観点で \(60\) 進法が用いられていますね(\(60\) 秒で \(1\) 分、\(60\) 分で \(1\) 時間)。
一方で、「時間 \(\text{h}\)」は日中の時間を \(12\) 等分したことが起源であり、\(12\) 進法が用いられているといえます(\(24\) 時間で \(1\) 日)。
n 進数の表し方
異なる \(n\) 進数同士の数の対応は、ものの数を考えるとわかりやすいです。
ここで、同じ「\(10\)」と書かれた数でも、\(n\) の値が違えばまったく違う数量を表していることに気づきましたか?
そのため、異なる \(n\) 進数をやりとりするときは、その数の右下に \((n)\) をつけて区別します。
数 \(X\) が \(n\) 進法で表されているとき、
\begin{align}\color{red}{X_{(n)}}\end{align}
と表現する。
(例)
- \(1011_{(10)}\):\(10\) 進数の \(1011\)
- \(1011_{(2)}\):\(2\) 進数の \(1011\)
- \(1011_{(3)}\):\(3\) 進数の \(1011\)
- \(1011_{(16)}\):\(16\) 進数の \(1011\)
念押ししますが、これらはまったく異なる数量ですよ!
n 進法の変換方法
ここでは、ある数を異なる \(n\) 進数に変換する方法を説明します。
n 進数 から 10 進数 に変換
任意の \(n\) 進数 \((n \neq 10)\) を \(10\) 進数に変換するには、位取りの考え方を利用します。
(例)
- \(1011_{(3)}\)
\(1 \cdot 3^3 + 0 \cdot 3^2 + 1 \cdot 3^1 + 1 \cdot 3^0\)
\(= 27 + 0 + 3 + 1\)
\(= \color{red}{31_{(10)}}\) - \(1011_{(16)}\)
\(1 \cdot 16^3 + 0 \cdot 16^2 + 1 \cdot 16^1 + 1 \cdot 16^0\)
\(= 4096 + 0 + 16 + 1\)
\(= \color{red}{4113_{(10)}}\)
10 進数 から n 進数 に変換
\(10\) 進数を任意の \(n\) 進数 \((n \neq 10)\) に変換するには、それ以上割れなくなるまで繰り返し \(n\) で割り、最後の商と各回の余りを確認します。
それらを逆向きに並べたものが \(n\) 進数への変換結果です。
つまり、その数に \(n\) が何乗分含まれているかを調べ、該当する桁に配分していることになります。
(例)
- \(53_{(10)}\) を \(3\) 進数に変換
→ \(\color{red}{1222}\) - \(53_{(10)}\) を \(16\) 進数に変換
→ \(\color{red}{35}\)
10 進数以外同士の変換
\(10\) 進法以外の記数法同士を変換するには、一度 \(\bf{10}\) 進数を仲介してから、目的の \(n\) 進法に直します。
(例)
- \(77_{(5)}\) を \(2\) 進数へ
\(77_{(5)} = 7 \cdot 5^1 + 7 \cdot 5^0 = 42_{(10)}\)
よって \(77_{(5)} = 42_{(10)} = \color{red}{101010_{(2)}}\) - \(111_{(2)}\) を \(3\) 進数へ
\(\begin{align}111_{(2)} &= 1 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0 \\&= 7_{(10)}\end{align}\)
\(111_{(2)} = 7_{(10)} = \color{red}{21_{(3)}}\)
\(\bf{2}\) 進法 ⇆ \(\bf{16}\) 進法
\(2^4 = 16^1\) の関係性から、\(2\) 進数と \(16\) 進数の変換は比較的スムーズに行えます。
\(2\) 進数の \(4\) 桁分が \(16\) 進数の \(1\) 桁分に相当することを知っていると便利ですよ!
n 進法の計算問題
それでは、実際の計算問題に挑戦しましょう。
計算問題①「十進法で表す」
次の数を十進法で表せ。
(1) \(1001011_{(2)}\)
(2) \(1\mathrm{F}8_{(16)}\)
(3) \(555_{(7)}\)
\(10\) 進数に変換するには、各桁の数字に位の大きさ(\(n^◯\))をかけ、足してあげるのでしたね。
位は、\(n^0\) の位から始まることに注意です。
(1)
\(1001011_{(2)}\)
\(= 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 \) \(+ \ 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0\)
\(= 64 + 8 + 2 + 1\)
\(= 75_{(10)}\)
答え: \(\color{red}{75_{(10)}}\)
(2)
\(\mathrm{F}\) は十進法の \(15\) に相当するから、
\(1\mathrm{F}8_{(16)}\)
\(= 1 \cdot 16^2 + 15 \cdot 16^1 + 8 \cdot 16^0\)
\(= 256 + 240 + 8\)
\(= 504_{(10)}\)
答え: \(\color{red}{504_{(10)}}\)
(3)
\(555_{(7)}\)
\(= 5 \cdot 7^2 + 5 \cdot 7^1 + 5 \cdot 7^0\)
\(= 245 + 35 + 5\)
\(= 285_{(10)}\)
答え: \(\color{red}{285_{(10)}}\)
計算問題②「二進法で表す」
次の数を二進法で表せ。
(1) \(69_{(10)}\)
(2) \(29\mathrm{A}_{(16)}\)
(3) \(54_{(7)}\)
\(10\) 進数や \(16\) 進数は直接 \(2\) 進数に直してしまいましょう。
それ以外の場合は、一度 \(10\) 進数に直してから目的の \(n\) 進数に変換します。
(1)
よって \(69_{(10)} = 1000101_{(2)}\)
答え: \(\color{red}{1000101_{(2)}}\)
(2)
よって \(29\mathrm{A}_{(16)} = 1010011010_{(2)}\)
答え: \(\color{red}{1010011010_{(2)}}\)
(3)
\(\begin{align}54_{(7)} &= 5 \cdot 7^1 + 4 \cdot 7^0\\&= 35 + 4\\&= 39_{(10)}\end{align}\)
\(39_{(10)} = 100111_{(2)}\)
答え: \(\color{red}{100111_{(2)}}\)
計算問題③「5 進法から n 進法の n を求める」
\(5\) 進数 \(334\) が \(n\) 進数 \(234\) に等しいとき、自然数 \(n\) を求めよ。
どちらの数も一度 \(10\) 進数に直し、それらが等しいことから方程式を得ましょう。
\(\begin{align}334_{(5)} &= 3 \cdot 5^2 + 3 \cdot 5^1 + 4 \cdot 5^0\\&= 75 + 15 + 4\\&= 94_{(10)} \ \text{…①}\end{align}\)
\(\begin{align}234_{(n)} &= 2n^2 + 3n^1 + 4n^0\\&= (2n^2 + 3n + 4)_{(10)} \ \text{…②}\end{align}\)
① = ② であるから
\(2n^2 + 3n + 4 = 94\)
\(2n^2 + 3n − 90 = 0\)
\((2n + 15)(n − 6) = 0\)
\(n\) は自然数であるから \(n = 6\)
答え: \(\color{red}{n = 6}\)
以上で問題も終わりです。
落ち着いて考えれば、\(n\) 進数の変換は難しいものではありません。
\(n\) 進法の考え方や計算のコツをつかんで、ぜひマスターしてくださいね!
10進数からn進数へ変換の例に書かれている、「110101(10)」というのは「110101(2)」の間違いだと思います。
この度はコメントいただきありがとうございます。
該当部分を修正いたしました。
このようにご指摘いただけるととても助かります。
今後ともどうぞ当サイトをよろしくお願いいたします。