みなさん。こんにちは。数学IAのコーナーです。今回は【位取り記数法】についてです。
位取り記数法、またはn進法とは、数字の書き表し方のことであり、コンピュータの仕組みを理解するうえで非常に重要な概念です。また、「すだれ算」はかなり簡単に理解できると思うのでせめて「すだれ算」はこの機会にマスターしておきましょう。
センター試験での出題はまちまちですが、今後一層重要になるPC関連の知識の初歩となります。将来PCを使った仕事に就きたい、という人にはセンター試験よりも大切です。
まずは位取り記数法とは何なのかを理解し、その後、10進数と2進数の相互変換、2進法での小数表記、2進数の四則演算 (足し算、引き算、掛け算、割り算)について解説いたします。
位取り記数法 (n進法)とは
我々の普段使っている数字は
0、1、2、、、、9 まで行くと、次は桁が1つ上がって 10 になります。
さらに10、11、12、、、、20、21、22、、、、98、99 まで行くと、また1つ桁が上がって、100になります。
このように、各桁の数字が0~9の10個の数字のどれかで表され、各桁の数のすべてが9になったら次の数は桁が上がる、というような数字の表し方を、「10進位取り記数法」またの名を「10進法」といい、「10進法」で書かれた数字を「10進数」といいます。
10進数以外にも数字の表し方は色々ありまして、実は身の回りにも10進数以外で表記された数字があります。
例えば、「時間」です。
「時間」は、60秒で1分になり、60分で1時間になります。これは「60進数」であると考えることができます。
他にも鉛筆がたくさんあるときに「ダース」という数え方をすることがあります。
1ダースは12本、2ダースは24本で、これは12ごとに桁が上がる「12進数」です。
そして、皆さんお使いのスマートフォンやPCの中では、「電気が流れている」「流れていない」の2つの状態を「1」と「0」とした2進数で数字が表されます。
10進数では0、1、2、3、、、、9、10 となりますが、
2進数では0と1しか使うことができないので、各桁の位のすべてが1になれば、桁が上がって、
0、1、10、11、100、101、110、111、1000、、、、となります。
10進数で表された数字は下のような意味を持っています。10進法なので10に各々の桁の数-1を使用します。
$$ 2378 = 2 \times 10^3 + 3 \times 10^2 + 7 \times 10^1 + 8 \times 10^0 $$
対して、2進数で表された数は下のような意味です。2進法なので2に各々の桁の数-1を使用します。わかりにくければ 1 が立っているところに2のベキ乗をかけて足し合わせるということができます。
$$ 101101 = 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 $$
よって、2進数で表された $101101$ という数を10進数にすると、
\begin{eqnarray} 101101_{(2)} &=& 32+0+8+4+0+1 \\ &=& 45_{(10)} \end{eqnarray}
となります。数字の右下に付いている $_{(2)}$ は「2進数で表している」ことを意味する記号です。
例題を見つつ、さらに理解を深めていきましょう。
例題 1以下の2進数で表記された数を10進数にせよ。
(1) 110011 (2) 10010010
以下、左辺は2進数、右辺はすべて10進数になっています。
10進数 → 2進数 の変換
2進数を10進数にするのは簡単なのですが、10進数を2進数にするのは少々困難です。
例として、10進数で表記された$87$という数字を2進数へ変換することを考えます。2進数へ変換するには、10進数で表記された数を2の累乗の数の和として表す必要があります。
$$ 87 = 64 (= 2^6 ) + 16 (= 2^4 ) + 4 (= 2^2) + 2 (= 2^1 ) + 1 (= 2^0 ) $$
$87$をこのように表すことができれば、あとは各桁に対応する$1$もしくは$0$を入れることで、2進数にすることができます。
すなわち、2進数で表すと $ 87_{(10)} = 1010111_{(2)}$ となります。
どういった計算をすれば良いかというと、まず、$87$は$2^6 =64$より大きく、$2^7 =128$より小さな数なので、$87-64$を実行し、$23$を得ます。
次に$23$と$2^5 =32$との大小を比較し、$23 < 2^5$ですので、続けて$2^4 = 16$との大小を比較します。
$23 > 2^4$ですので、$23-16$を実行し、$7$を得ます。このような計算を$2^0$まで続けることで、
$$ 87 = 64 (= 2^6 ) + 16 (= 2^4 ) + 4 (= 2^2) + 2 (= 2^1 ) + 1 (= 2^0 ) $$
を得ることができます。
今回は2進数への変換を行いましたが、3進数でも、5進数でも、16進数でも方法は同じです。
10進法を2進法にする「すだれ算」について
前章で述べたような方法を用いることで、10進数は2進数へ変換することが可能です。しかし、上記方法は少々面倒だったので、頭の良い方がもっと簡単な方法を見つけました。
日本ではその方法はすだれ算と呼ばれます。計算後の形が「すだれ」に似ていることから名付けられました。「すだれ」というのは日本のカーテンのことですね。都会には存在しません。
方法は実際にやってみるのが一番分かりやすいです。以下に10進数の$87$を例として、すだれ算の計算過程を図にしました。
「すだれ算」は割り算を連続して実行するのですが、余りを右側に記しておきます。2で「すだれ算」をする(2進数に変換する)ときには余りは0または1になります。
商が0になるまで計算が終わったら、横に書いておいた余りを下から順番に並べます。
すると不思議なことに、2進数への変換が完了します。原理について詳しいことは説明しませんが、上の図を見ていると分かる方もいるかもしれません。
すだれ算は特殊な計算方法ですし、下から余りを読んでいく、というのは覚えにくい方もいるかもしれません。しかし、すだれ算は変換を簡単にするためのものですので、無理して使う必要はありません。忘れてしまったときには、前の章の方法を使えば大丈夫です。2進数とは何なのかを分かっていれば、前の章で述べた計算方法はすぐに思い浮かぶはずです。
また、計算に自信がないときには、2進数を10進数にもう一度変換し、ちゃんと元の数に戻るかを検討するとよいでしょう。2進数から10進数への変換は簡単ですので。
例題 2以下の10進数で表記された数を2進数にせよ。
(1) 39 (2) 89
どちらもすだれ算で計算した結果を以下に示します。
2進数の小数表記
段々と難しくなってきます。次は2進数で小数を表します。こちらも10進数での表記と比較してみると分かりやすいです。
$0.739$ という10進数で表記された小数について考えます。この数字は以下のような意味を持っています。
$$ 0.739 =0 \times \left( \frac{1}{10} \right)^0 + 7 \times \left( \frac{1}{10} \right)^1 + 3 \times \left( \frac{1}{10} \right)^2 + 9 \times \left( \frac{1}{10} \right)^3 $$
では、$0.101011$という2進数で表された小数について考えます。この小数は以下のような意味を持っています。
\begin{eqnarray} 0.101011 = 0 \times \left( \frac{1}{2} \right)^{0} + 1 \times \left( \frac{1}{2} \right)^{1} + 0 \times \left( \frac{1}{2} \right)^{2} + 1 \times \left( \frac{1}{2} \right)^{3} \\ + 0 \times \left( \frac{1}{2} \right)^{4} + 1 \times \left( \frac{1}{2} \right)^{5} + 1 \times \left( \frac{1}{2} \right)^{6} \end{eqnarray}
よって10進数にすると、
\begin{eqnarray} 0.101011_{(2)}&=& \frac{1}{2} + \frac{1}{8} + \frac{1}{32} + \frac{1}{64} = \frac{43}{64} \\ &=& 0.6718 \cdots_{(10)} \end{eqnarray}
となります。2進数で表記すれば有限小数となる数字が、10進数で表記すると無限小数になることはよくあります。逆もまた然り。
整数の場合と同様に、2進数から10進数に変換することは容易ですが、10進数から2進数へ変換することは少々難しいです。とはいえ方法は整数の場合と同様です。
$0.625$という10進数を2進数へ変換することを考えます。この10進数は
\begin{eqnarray} 0.625 &=& 0.5 + 0.125 \\ &=& 1 \times \left( \frac{1}{2} \right)^{1} + 1 \times \left( \frac{1}{2} \right)^{3} \end{eqnarray}
と、表記されるので、2進数で表すと、$0.101$となります。10進数から2進数にするときに有限小数となるのは最後の桁の数が$5$のときだけです。ゆえにテストでは最後の桁が$5$となる数以外はまず出題されません。
上記のように表すには、整数の場合と同様に、$\frac{1}{2}=0.5$と大小比較して、$\frac{1}{4} = 0.25$と大小比較して、、、という過程を繰り返します。
2進数の四則演算
最後に2進数の四則演算について、説明します。
2進数の四則演算は、「2進数のまま計算する方法」と「10進数に変換してから計算する方法」の2つがあります。
10進数に慣れ親しんだ私たち人間は、10進数に変換した方が数字をイメージしやすく、間違いも少なくなるので、受験生の皆さんは10進数に変換して計算しましょう。
ただ、「コンピュータの気持ち」を知るためにも、受験会場以外の場で1度くらいは、2進数のまま四則演算をしてみて欲しいと思います。
以下に2進数の四則演算の方法を示します。
2進数の四則演算で必要となるのは、以下のルールのみです。
上の図は、1桁の2つの2進数の足し算と掛け算の結果を表しています。足し算は$1+1=10$になることにご注意ください。掛け算は10進数の場合と同じです。引き算は足し算の逆の演算ですね。
上のルールを見ながら下の例題を解いてみてください。
例題 32進数で表記された2つの自然数、$A=1101100$、及び、$B=1001$について以下の値をそれぞれ求めよ。
(1) $A+B$ (2) $A-B$ (3) $A \times B$ (4) $A \div B$
実際に解くと下のようになります。
2進数の計算に慣れてくると、やっていることは結局、$1$と$0$を足したり、引いたりしているだけだということが分かってきて、何も考えずに計算できるようになってきます。頭は空っぽで鉛筆を持つ手だけが動いている。それが「コンピュータの気持ち」です。
コンピュータの中枢は、ひたすら高速に2進数の四則演算を行っています。
コンピュータは2進数の四則演算がとても得意です。私たちも頑張れば上の問題を1つ20秒くらいで解けるようになるので、1秒に3回ぐらいは2進数の足し算ができます。一方の、コンピュータの中枢であるCPUは、1秒に30億回くらい2進数の足し算を実行します。
そうしてできた2進数を8桁ごとに区切り、できた8桁の2進数に「a」から「z」までの文字を割り振れば「文字列」ができますし、様々な色を割り振れば、色の並びができて、「画像」が出来上がります。8桁の2進数に「音」を割り振れば「音楽」となります。
2進数とコンピュータの関係に興味が湧いた方は是非、さらに詳しく調べてみてください。
繰り返しになりますが、我々人間には10進数の計算の方が簡単ですので、問題として出題されたときには10進数に直して計算しましょう。
上記問題を10進数にすると、$A=108$であり、$B=9$なので、和は$117$、差は$99$、積は$972$、商は$12$です。10進数であればあっという間に計算できることが分かると思います。
今回のまとめ
今回の内容は以下のとおりです。
・10で桁が上がるのが10進数、2で桁が上がるのが2進数
・すだれ算は「2で割って、余りを右に書いておき、最後に余りを下から読む」
・四則演算は10進数に変換して計算しよう
より詳しくこの範囲を勉強したい人は「N分岐演算子記数法 I-A.整数編 第1分冊: – エヌブンキエンザンシキスウホウ (MyISBN – デザインエッグ社)」を読んでみましょう。整数の範囲を勉強しましょう。
コメント