位取り記数法を理解しよう(n進法の計算とすだれ算)【数学IA】

みなさん。こんにちは。数学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進数になっています。

\begin{eqnarray} 110011 &=& 2^5 + 2^4 + 2^1 +2^0 \\ &=& 32 +16 +2 +1 \\ &=& 51 \end{eqnarray}
\begin{eqnarray} 10010010 &=& 2^7 + 2^4 + 2^1 +2^0 \\ &=& 128 +16 +2 +1 \\ &=& 147 \end{eqnarray}

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 – デザインエッグ社)」を読んでみましょう。整数の範囲を勉強しましょう。

スポンサーリンク
スポンサーリンク

にほんブログ村 受験ブログへ
にほんブログ村

にほんブログ村 受験ブログ 大学受験(本人・親)へ
にほんブログ村

コメント

");const o=ie?ie.createHTML(e):e;if(nt===tt)try{t=(new W).parseFromString(o,at)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(nt,"template",null);try{t.documentElement.innerHTML=ot?ae:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),nt===tt?ue.call(t,Ie?"html":"body")[0]:Ie?t.documentElement:i},bt=function(e){return ce.call(e.ownerDocument||e,e,H.SHOW_ELEMENT|H.SHOW_COMMENT|H.SHOW_TEXT|H.SHOW_PROCESSING_INSTRUCTION|H.SHOW_CDATA_SECTION,null)},St=function(e){return e instanceof B&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof z)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Rt=function(e){return"function"==typeof b&&e instanceof b},wt=function(e,t,n){pe[e]&&u(pe[e],(e=>{e.call(o,t,n,ut)}))},Ct=function(e){let t=null;if(wt("beforeSanitizeElements",e,null),St(e))return _t(e),!0;const n=st(e.nodeName);if(wt("uponSanitizeElement",e,{tagName:n,allowedTags:Ne}),e.hasChildNodes()&&!Rt(e.firstElementChild)&&_(/<[/\w]/g,e.innerHTML)&&_(/<[/\w]/g,e.textContent))return _t(e),!0;if(e.nodeType===J)return _t(e),!0;if(Me&&e.nodeType===Q&&_(/<[/\w]/g,e.data))return _t(e),!0;if(!Ne[n]||Ce[n]){if(!Ce[n]&&Dt(n)){if(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n))return!1;if(we.tagNameCheck instanceof Function&&we.tagNameCheck(n))return!1}if(Ye&&!qe[n]){const t=re(e)||e.parentNode,n=oe(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o){const r=X(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,$(e))}}}return _t(e),!0}return e instanceof R&&!Et(e)?(_t(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!_(/<\/no(script|embed|frames)/i,e.innerHTML)?(ke&&e.nodeType===Z&&(t=e.textContent,u([fe,de,he],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(o.removed,{element:e.cloneNode()}),e.textContent=t)),wt("afterSanitizeElements",e,null),!1):(_t(e),!0)},Lt=function(e,t,n){if(Be&&("id"===t||"name"===t)&&(n in r||n in mt))return!1;if(ve&&!Le[t]&&_(ge,t));else if(De&&_(Te,t));else if(!Se[t]||Le[t]){if(!(Dt(e)&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,e)||we.tagNameCheck instanceof Function&&we.tagNameCheck(e))&&(we.attributeNameCheck instanceof RegExp&&_(we.attributeNameCheck,t)||we.attributeNameCheck instanceof Function&&we.attributeNameCheck(t))||"is"===t&&we.allowCustomizedBuiltInElements&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n)||we.tagNameCheck instanceof Function&&we.tagNameCheck(n))))return!1}else if(Ze[t]);else if(_(Ae,g(n,Ee,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==T(n,"data:")||!Ke[e]){if(Oe&&!_(ye,g(n,Ee,"")));else if(n)return!1}return!0},Dt=function(e){return"annotation-xml"!==e&&h(e,_e)},vt=function(e){wt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Se};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=st(a);let p="value"===a?c:y(c);if(n.attrName=s,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,wt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(At(a,e),!n.keepAttr)continue;if(!xe&&_(/\/>/i,p)){At(a,e);continue}if(Me&&_(/((--!?|])>)|<\/(style|title)/i,p)){At(a,e);continue}ke&&u([fe,de,he],(e=>{p=g(p,e," ")}));const f=st(e.nodeName);if(Lt(f,s,p)){if(!We||"id"!==s&&"name"!==s||(At(a,e),p=Ge+p),ie&&"object"==typeof G&&"function"==typeof G.getAttributeType)if(l);else switch(G.getAttributeType(f,s)){case"TrustedHTML":p=ie.createHTML(p);break;case"TrustedScriptURL":p=ie.createScriptURL(p)}try{l?e.setAttributeNS(l,a,p):e.setAttribute(a,p),St(e)?_t(e):m(o.removed)}catch(e){}}}wt("afterSanitizeAttributes",e,null)},Ot=function e(t){let n=null;const o=bt(t);for(wt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)wt("uponSanitizeShadowNode",n,null),Ct(n)||(n.content instanceof s&&e(n.content),vt(n));wt("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(ot=!e,ot&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Rt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Ue||ft(t),o.removed=[],"string"==typeof e&&(je=!1),je){if(e.nodeName){const t=st(e.nodeName);if(!Ne[t]||Ce[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof b)n=Nt("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===V&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!Fe&&!ke&&!Ie&&-1===e.indexOf("<"))return ie&&ze?ie.createHTML(e):e;if(n=Nt(e),!n)return Fe?null:ze?ae:""}n&&Pe&&_t(n.firstChild);const c=bt(je?e:n);for(;i=c.nextNode();)Ct(i)||(i.content instanceof s&&Ot(i.content),vt(i));if(je)return e;if(Fe){if(He)for(l=se.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Se.shadowroot||Se.shadowrootmode)&&(l=me.call(a,l,!0)),l}let m=Ie?n.outerHTML:n.innerHTML;return Ie&&Ne["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&_(q,n.ownerDocument.doctype.name)&&(m="\n"+m),ke&&u([fe,de,he],(e=>{m=g(m,e," ")})),ie&&ze?ie.createHTML(m):m},o.setConfig=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ft(e),Ue=!0},o.clearConfig=function(){ut=null,Ue=!1},o.isValidAttribute=function(e,t,n){ut||ft({});const o=st(e),r=st(t);return Lt(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],p(pe[e],t))},o.removeHook=function(e){if(pe[e])return m(pe[e])},o.removeHooks=function(e){pe[e]&&(pe[e]=[])},o.removeAllHooks=function(){pe={}},o}();return oe}))
タイトルとURLをコピーしました