PR
10進数を2進数に変換する方法と「N進数の本質」をわかりやすく説明
10進数を2進数に変換する方法と、なぜその方法で2進数に変換できるのか?の原理を説明します。
これが理解できれば、N進数は怖くありません。
- どうやって10進数を2進数に変換するの?
- 10進数を2進数に変換する方法は知ってるけど、なんで2進数に直せるの?
- N進数ってそもそもなに?
そもそも10進数や2進数とは
突然ですが、2進数ってなんですか?
2進数ってアレですよね?0と1が並んだヤツですよね?授業で習ったとき、正直意味わかんなかったんですけど…。
では、普段使ってる数は何進数ですか?
あれでしょ、10進数ってやつでしょ?
じゃあ、10進数ってなに?
…普段使ってる数です。
…
我々は普段、0、1、2、3、4、5、6、7、8、9の10種類の数字を使っています。
数を数えるとき、「0、1、2、3、4、5、6、7、8、9」と数えたら、次は「10(ジュウ)」ですよね。
このとき何が起きているかというと、新たな種類の数字が現れたのではなく、位上がりが起きて「十の位が1、一の位が0」という構造をもった数になります。
10種類の数字を使い、各位が10になった時点で位上がりが起きる。この仕組みで表記する方法を10進数と言います。
まったく同じようにして、2進数も定義することができます。
2進数は0、1の2種類の数字を使います。「0、1」と数えたら、次は2なのですが、ここは0と1しか数字の種類を知らない体(てい)で「10\(_{(2)}\)(イチゼロ)」(=10進数で「2」のこと)と表記して、位上がりが起きます。ちなみに、10\(_{(2)}\)は「2進数表記ですよ=10進数のジュウじゃないですよ」の意味です。
つまり、2種類の数字を使い、各位が「10\(_{(2)}\)(イチゼロ)」(=10進数で「2」)になった時点で位上がりが起きる。この仕組みで表記する方法を2進数と言います。
基本的には何種類の数を使うか、なんですね。その数を小さい順に使っていったとき、種類が尽きたら位上がりが起きるってことか。
だから2進数は「0と1」の2種類しか使わないのよね。
「16進数とは?」
16進数という言葉も聞いたことがあると思います。これも10進数、2進数と同様に、16種類の数字を使い、各位が「10(_{(16)})(イチゼロ)」(=10進数で「16」)になった時点で位上がりが起きます。
ここで「16種類の数字」とは、0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、Fのことです。新たな種類の数字を作るのは分かりにくい(「この記号が10を表すんだ!」とかが周知されにくい)ので、アルファベットのA〜Fを新たな種類の数字とみなします。
例1.B\(_{(16)}\)=>11\(_{(10)}\)(ジュウイチ)のことです。
例2.2C\(_{(16)}\)は、16というカタマリが2個とC\(_{(16)}\)=12\(_{(10)}\)(ジュウニ)という構造なので、10進数で言うと「\(16 \times 2 + 12=44_{(10)}\)」を表します。
ちなみに2進数や16進数が比較的有名なのは、パソコンのIPアドレスやカラーコードなどによく使われるからです。
数学をモチーフにしたオシャレなオリジナルグッズも販売中です!おかげさまで好評頂いてます!
普段使いしやすいグッズです。ステッカーやマグカップも人気ですよ!
まずは2進数に変換する方法の説明
10進数の数をどんどん2で割っていきます。そして、余りを下から順に書いていけば2進数に変換することができます。
例.10進数の21を2進数に変換してみます。
普通、教科書などでは手順5「商の1を割って0余り1まで書く」をしません。必ず、(最後の余り1)=(前段階の商1)となるので、最後の余りは前段階の商の1をもってきます。
ただし、原理の理解をするには最後まで割って0余り1まで書いた方がいいでしょう。
とりあえず10進数から2進数への変換ができれば良い、という人はここまでで大丈夫です。
次からは、なぜこの方法で2進数に変換できるか説明します。「原理をちゃんと知りたい!」という人は是非読んでみてください。
なぜこの方法で2進数に変換できるのか
ここからが本題です。なぜ、この方法で2進数に変換できるのか、を説明します。この原理を知れば、N進数の基本が理解できます。
N進数とは
ん?ということは、別に使う数の種類を少なくする(か無理矢理にでも増やす)ことができれば、何進法でも作れるってこと?
そういうことですね。3進法だろうが、4進法だろうが、12進法だろうが作れますね。とりあえず、N進法の仕組みについて説明しますね。
N進数とは、数を以下のように各位に分けて記述する方法です。
$$ a_n \cdot N^n + a_{n-1} \cdot N^{n-1} + \cdots + a_2 \cdot N^2 + a_1 \cdot N^1 + a_0 \cdot N^0 $$
それぞれの係数\(a_k\) \((0 \leq k \leq n)\)の取り得る値は\(0 \leq a_k \leq N-1 \)で、\(a_k=N\)になったら位上がりが起きる、という構造になっています。
急に文字がたくさん出てきた…。
具体例を見た方がわかりやすいかもね。
例1.
10進数の12345(イチマンニセンサンビャクヨンジュウゴ)は
$$ 1 \cdot 10^4+2 \cdot 10^3 + 3 \cdot 10^2 + \color{#009e73}{4 \cdot 10^1} +\color{#bc69f8}{5 \cdot 1} $$
このように、各位に分けて表記できます。
1の位「5」を「6→7→8→9」と増やしていったら、「10(ジュウ)」になった時点で位上がりが起きて、\(\color{#009e73}{4 \cdot 10^1}→\color{#009e73}{5 \cdot 10^1}\)となります。
普通に数を数える感覚だね。そういえば、授業中、確かにあんな感じで各位ばらばらにして書いてた記憶が…。
例2.
2進数の10101\(_{(2)}\)は
$$ 1 \cdot 2^4+0 \cdot 2^3 + 1 \cdot 2^2 + \color{#009e73}{0 \cdot 2^1} +\color{#bc69f8}{ 1 \cdot 1} $$
という各位の構造になっています。この形は重要ですので、ぜひ押さえておいてください。
先ほど説明はしましたが、2進数の場合、1の位「1」を1増やしたときに、\(「10_{(2)}」\)(10進数の「2」)になり、位上がりが起きて、\(\color{#009e73}{0 \cdot 2^1}→\color{#009e73}{1 \cdot 2^1}\)となります。
10進数では「1の位、10(ジュウ)(=\(10^1\))の位、100(ヒャク)(=\(10^2\))の位、1000(セン)(=\(10^3\))の位、、、」となっていたところが、2進数だったら…
「1の位、\(2^1\)の位、\(2^2\)の位、\(2^3\)の位、、、」となっているということですね。
\(2^1\)の位、\(2^2\)の位って…耳慣れないけど。
2進数だから、普段の数と数え方が違う、と思えばいいよ。
このように、N進数は「各\(N^n\)の位がいくつあるのか」と「それがN個になった時点で位上がりが起きる」という仕組みになっています。
10進数を2進数に変換する、とは
なるほど!N進数ってのが何かは掴めてきたぞ!…でも、なんでさっきので2進法に変換できるんだろ?
ポイントはNで割ったときの余りだよ(って授業中に先生が言ってたよ)。
10進数を2進数に変換する、とは
$$ a_n \cdot 10^n + a_{n-1} \cdot 10^{n-1} + \cdots + a_2 \cdot 10^2 + a_1 \cdot 10^1 + a_0 \cdot 1 $$
$$ = b_n \cdot 2^n + b_{n-1} \cdot 2^{n-1} + \cdots + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 1 $$
$$ (0 \leq a_k \leq 9,0 \leq b_k \leq 1) $$
の形にする、ということです。(実際は10進数の\(n\)と2進数の\(n\)は異なる値です。)
補足ですが、\( a_{なんとか}\)は10進数の各位の数(なので、0、1、2、、、9までの数字)、\( b_{なんとか}\)は2進数の各位の数(なので、0か1の数字)を表します。
これを踏まえた上で、冒頭の10進数の数を2進数に変換する方法について考えてみます。
$$ b_n \cdot 2^n + b_{n-1} \cdot 2^{n-1} + \cdots + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 1 $$
と表そうとしているので、各\( b_{なんとか}\)を求めればよい、ということになります。
ちなみに\( b_{なんとか}\)は「0か1」です。2進数での各位の数を求めよう、ということですね。
ここで、冒頭の10進数を2進数に直す方法に立ち返ってみると、その数をどんどん2で割って余りを順に並べていく、という作業をしています。
$$ a_n \cdot 10^n + a_{n-1} \cdot 10^{n-1} + \cdots + a_2 \cdot 10^2 + a_1 \cdot 10^1 + a_0 \cdot 1 $$
を2で割っているわけですね。しかし、
$$ a_n \cdot 10^n + a_{n-1} \cdot 10^{n-1} + \cdots + a_2 \cdot 10^2 + a_1 \cdot 10^1 + a_0 \cdot 1 $$
$$ =b_n \cdot 2^n + b_{n-1} \cdot 2^{n-1} + \cdots + b_2 \cdot 2^2 + b_1 \cdot 2^1 + b_0 \cdot 1 $$
なので、10進数を2で割る、ということは、2行目の
$$ \color{#009e73}{b_n \cdot 2^n + b_{n-1} \cdot 2^{n-1} + \cdots + b_2 \cdot 2^2 + b_1 \cdot 2^1} + \color{#bc69f8}{b_0 \cdot 1} \cdots① $$
の式を2で割ることと同じです。しかし、ここで考えてほしいのは、
$$ \color{#009e73}{b_n \cdot 2^n + b_{n-1} \cdot 2^{n-1} + \cdots + b_2 \cdot 2^2 + b_1 \cdot 2^1} $$
の部分は全て2で割り切れる、ということです。なので、余り(0か1)は、
$$ \color{#bc69f8}{b_0 \cdot 1} $$
と等しくなります。 (\(b_0 \cdot 1 = b_0\)で、\(0 \leq b_0 \leq1\)なので。)
つまり、①を2で割ったとき、
商 \( b_n \cdot 2^{n-1} + b_{n-1} \cdot 2^{n-2} + \cdots + b_2 \cdot 2^1 + b_1 \cdot 1 \)
余り \( b_0 \)
となることがわかります。商の\( 2^k \)の次数が一つずつ下がっていることもポイントです。
ここが理解のヤマです!下に例を載せていますので、よく読んで理解しましょう!
例1.
\(3 \div 2 \)は「商1、余り1」ですが、
\(3 = \color{#009e73}{1\cdot 2^1} + \color{#bc69f8}{1} \)を2で割った、ともとれるので、\( (\color{#009e73}{1\cdot 2^1} + \color{#bc69f8}{1}) \div 2 \)の計算をしていることと同じです。
商の1は\( \color{#009e73}{1\cdot 2^1} \)を2で割ったときの答え、余り1はそのまま\( \color{#bc69f8}{1} \)の値と一致します。
例2.
\(4 \div 2 \)は「商2、余り0」ですが、
\(4 = \color{#009e73}{1\cdot 2^2+0 \cdot 2^1} + \color{#bc69f8}{0} \)を2で割った、ともとれるので、\( (\color{#009e73}{1\cdot 2^2+0 \cdot 2^1} + \color{#bc69f8}{0}) \div 2 \)の計算をしていることと同じです。
商の2は\(\color{#009e73}{1\cdot 2^2+0 \cdot 2^1}\)を2で割ったときの答え(\( (1\cdot 2^2+0 \cdot 2^1)\div 2 = 1\cdot 2^1+0 \cdot 1 = 2\))、余り0はそのまま\( \color{#bc69f8}{0} \)の値と一致します。
例3.
\(7 \div 2 \)は「商3、余り1」ですが、
\(7 = \color{#009e73}{1\cdot 2^2+1 \cdot 2^1} + \color{#bc69f8}{1} \)を2で割った、ともとれるので、\((\color{#009e73}{1\cdot 2^2+1 \cdot 2^1} + \color{#bc69f8}{1}) \div 2 \)の計算をしていることと同じです。
商の3は\(\color{#009e73}{1\cdot 2^2+1 \cdot 2^1}\)を2で割ったときの答え(\( (1\cdot 2^2+1 \cdot 2^1)\div 2 = 1\cdot 2^1+1 \cdot 1 = 3\))、余り1はそのまま\( \color{#bc69f8}{1} \)の値と一致します。
具体例を見て、上の文字が入った式がどんな意味か理解できましたか?
ということで、1回目2で割ったときの余り=\(b_0\)となることがわかりました。
このときの商をさらに2で割ると、
商 \( b_n \cdot 2^{n-2} + b_{n-1} \cdot 2^{n-3} + \cdots + b_2 \cdot 2^0 \)
余り \( b_1 \)
となります。商の\( 2^k \)の次数が先ほどの商よりさらに一つ下がっていますね。これを繰り返していってそれぞれの余りを考えると、\( b_0 \)、\( b_1 \)、…\( b_{n-1} \)、\( b_n \)が順に得られるので、これを逆から並べると、2進数に直せる、という原理になります。
この原理がわかっていれば、3進数でも4進数でも、それぞれの数で割っていき、余りを並べればよいということが理解できます。
おまけ「3進数に変換してみる」
10進数を2進数に変換する要領で、3進数にも変換可能です。
例.10進数の21を3進数に変換してみる。
3で割っていくと、
\(21=\color{#bc69f8}{2} \cdot 3^2+\color{#bc69f8}{1} \cdot 3^1+\color{#bc69f8}{0 }\cdot 1\)
の0、1、2が順番に余りとして出てきます。
まとめ
N進数に変換するという操作には、数学的に2つの重要な点があります。
①「N進数の構造がわかる」
今回は触れませんでしたが、小数に関しても、
$$ c_1 \cdot N^{-1} + c_2 \cdot N^{-2} + \cdots +c_n \cdot N^{-n} $$
となることが自然な流れで理解できます。(マイナス乗については、指数関数の分野で学習します。)
② 「余りは割れる保証があるところからは出てこない。逆に割れる保証がないところから出てくる。」
これは割り算の余りの話をするときによく使う考え方です。数学IIの整式の割り算のところでも同じような考え方をする問題が出てくるので、覚えておきましょう。
今回は、N進数の位が大きい部分ほどNで割れる保証がある、つまり、
(余り)=(割れる保証のない一番下の位)
となることがポイントです。
商をさらに割ることで(次の余り)=(次の位)、(その次の余り)=(その次の位)、、、が順番に出てきます。
これで何進法にでも変換できるぞ!