- ベストアンサー
2進法
数学が苦手ですが興味があるので。 2進法を勉強しています。 234 =117x2+0x1 =58x2~2+1x2+0x1 =29x2~3+0x2~2+1X2+0x1 : : : =1x2~7+1x2~6+1x2~5+0x2~4+1x2~3+0x2~2+1x2+0x1 =11101010 とテキストに書いてあるのですが。 1. どのように すれば 58や29 とゆった 数字が求められるのでしょうか。 2. なぜ このように 式が展開でき 最終的に 11101010 にたどりつくのでしょうか。 教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
10進数を同じプロセスで式に展開してみると分かりやすいかもしれません。 例えば、86420 という数を展開してみましょう。 86420 =8642×10^1+0×10^0 =864×10^2+2×10^1+0×10^0 =86×10^3+4×10^2+2×10^1+0×10^0 =8×10^4+6×10^3+4×10^2+2×10^1+0×10^0 この展開の手順は理解できますよね? 式の途中に8642 や 864といった数字が出てきますが なぜその数字が出てきたかもお分かりになると思います。 また、No.1さんのご回答と同じようにしてみます。 86420/10=8642余り0 8642/10=864余り2 864/10=86余り4 86/10=8余り6 8/10=0余り8 最後に、今までの計算の余りを下から読むと 86420 となります。 「86420を10で割った.... 答えの 8642」の方を 下から 書いていって、 0.8.86.864.8642 と 書いて 10進法の 表示でも ・・・いいわけないですよね ^^; 上の例は「10進数」で考えているので「10^3」とか「/10」ですが、 「2進数」の場合はこれが「2^3」とか「/2」になっているだけのお話です。
その他の回答 (5)
- ringouri
- ベストアンサー率37% (76/201)
テキストの説明がぶっきら棒であまり良くないですね。 十進法の表記は下の桁から 1 ( = 10^0), 10 ( = 10^1), 100 ( = 10^2), 1000 ( = 10^3), 10000 ( =10^4) ・・・・・ の「まとまり」が何個あるのか 0から9の数字で表すやり方です。 例:654 = 4*1 + 5*10 + 6*100 二進法は上の10の代わりに2にしたもので、 1 ( = 2^0), 2 ( = 2^1), 4 ( = 2^2), 8 ( = 2^3),16 ( = 2^4) ・・・・・ の「まとまり」が何個あるのか 0と1の数字で表すやり方です。(常識として、1,2,4,8,16,32,64,128,256,512,1024くらいまでは覚えておきましょう。十進法の位取りで、一、十、百、千、万、億、兆、京などと覚えているのと似たようなもの) 例:11101010 = 0*1 + 1*2 + 0*4 + 1*8 + 0*16 + 1*32 + 1*64 + 1*128 ( = [234]d ) 二進法と十進法で同じ文字(0,1)を使うので、混乱を避けたい場合は[xxx]b、[yyy]d とか [xxx]2、[yyy]10 というふうに、二進法か十進法か明示した表記をします。 二進数表記から十進数表記への変換は上の様に考えればよいのですが、逆に御質問の十進数表記から二進数表記の変換の場合が少し直感的に分かりづらいのは確かでしょう。 これは、「与えられた数を2で順に割っていった残り(0か1)が下の桁から順に二進法の表記となる」という(理論的な)説明が、実際の頭の中での(直感的な)計算の理解の仕方と違っているからではないでしょうか。コンピュータでの処理の場合はこの考え方が合理的です。二進数に変換した後の表記が何桁になるのか知らなくても処理できるからです。(実際には扱える上限は既知ですが、理論上の話として) しかし、実際に[234]d を二進数表記に変換すすことを考えた場合、 先程の1,2,4,.... の数列を覚えているとして、 234に含まれる最大の数は(256ではなく)128 → 「128の桁」は1 234-128 = 106 これには64が含まれている →「64の桁」は1 106-64 = 42 これには32が含まれている → 「32の桁」は1 42-32 = 10 これには16が含まれない →「16の桁」は0 これには8が含まれる → 「8の桁」は1 10-8 = 2 これには4が含まれない →「4の桁」は0 これには2が含まれる →「2の桁」は1 2-2 = 0 これには1が含まれない →「1の桁」は0 従って、[234]d → [11101010]b というふうに上の桁から変換するのが自然かもしれません。 12345円と言われた時に、1万円札1枚 + 千円札2枚 + 百円玉3個 + 十円玉4個 + 一円玉5個 (実際には五円玉があるので、ちょっと違うけど ^_^;)というように上の桁から金額のイメージを持つ方が普通であり、 まず10で割って余りが5、次に10で割って余りが4....というように下の桁から把握するやり方には普通慣れていません。違和感がありますね。 しかし、理論やコンピュータの演算回路の設計では、「余り」に注目する方がアルゴリズムが綺麗ですし、実用上も便利なので、そのように説明されることが多いのでしょう。割っていって余りを書き出し下の桁から二進数表記を求めるやり方の原理(理屈)は二進数表記の定義そのものから直ぐに導けます。あらかじめ二進数表記があると仮定して、各桁の数字(0か1)を求めるには、順番に2で割って行って、2の累乗の「まとまり」を作っていけばよいだけです。 No.5さんの回答が詳しく説明されているように、計算して行けば、途中の58や29が(思いつき/ヒラメキ ではなく)機械的な計算で出てくることが分かります。しかし、途中の因数を求めるのは決して本質的なことではなく、先に示したように、2の累乗の「まとまり」が有るか無いかだけの判断で引き算だけの計算で求めるやり方もあるわけです。
お礼
ありがとうございました。 余りに 注目する ことに 人生で はじめて 気がつきました。
- ilnmfay
- ベストアンサー率61% (8/13)
>なぜ 「余り」の 数字を 11101010と 書いたものが >二進法の 表示になるでしょうか。 に関して説明したいと思います。 10進法で考えてください。 例えば、294 294÷10 = 29 余り 4 29 ÷10 = 2 余り 9 2 ÷10 = 0 余り 2 で余りを下から、読むと294 になるじゃないですか。 最初の式は、 294 = 29*10 +4 1桁の分が余ります。 10で割ったので10に満たない分が余ります。 じゃあ10の位は? って考えます。さっきの余りの4をムシすると、 290。さっきの294÷10 = 29 から 294の中に10が29個あることがわかっています。 10の位っていうのは、その数の中に10がいくつあるかなので、10の位っていうのは29でもいいのですが、10進法なので1つの位に10以上の数は使えません。 なので 29÷10の余り9が10の位になります。 以下同じ操作をすれば、余りを下から読むと 294になります。 つまり、 294 = 29*10+4 = (2*10 +9)*10 +4 だから余りを下から読むと 294になるのです。 同じ考え方を 2進法に適用します 234を2で割ると 234 = 117 *2 +0 なので 2が117個と 0です。 2進法の2の位は その数の中に 2がいくつあるかを意味するので、 234 = 117,1でいいのかもしれませんが、各桁に0,1しか使えないので、 117 ÷ 2 = 58 余り1で 234 = 117*2 +0 = (58*2+1)*2 +0 = 58*(2^2) + 1*2 +0 じゃあ、2の2乗の位 が 58個あるから … 58 ÷2 = 29 234 = 58*(2^2) + 1*2 +0 = (29*2) * (2^2) +1*2 +0 = 29 * (2^3) +1*2 +0 … = (14*2+1) * (2^3) +1*2 +0 = 14 * (2^4) +1*(2^3)+1*2 +0 = 7 * (2^5)+1*(2^3)+1*2 +0 = (3*2+1)*(2^5)+1*(2^3)+1*2 +0 = (3*2)*(2^6) +1*(2^5)+1*(2^3)+1*2 +0 = (1*2+1)*(2^6) +1*(2^5)+1*(2^3)+1*2+0 = 1*(2^7)+1*(2^6)+1*(2^5)+1*(2^3)+1*2+0 -> 11101010 です。 頑張って具体的に書いたのですが、逆にわかりにくくなったかもしれません。すみません。 この内容を抽象的に書いたものがよく教科書に載っているので確かめてみてください。
- sapporo30
- ベストアンサー率33% (905/2715)
> 0.1.3.7.14.29.58.117 と 書いて 二進法の 表示でも いやいや そうではなく、 10進数を2進数に変換する方法として、 「234を2で割った.... 余りを 0 答えを又2で割って 117 / 2 とするのであって、 そもそも 2進数は、0 と 1 だけで、2になったら桁が繰り上がる というものですから・・・ 10 進数の 0 は、2進数の0 10 進数の 1 は、2進数の1 10 進数の 2 は、2進数の1 に 1 を加えると2になるので 繰り上がって 10 10 進数の 3 は、2進数の11 10 進数の 4 は、2進数の11 に1を加えます。 1に1 をたすと、2 になりますので、 繰り上がって 、繰り上がった2桁目も繰り上がって 100 となります。
> 0.1.3.7.14.29.58.117 と 書いて 二進法の 表示でも > いいような 気がします。 たぶん、その通りだと思います。 パソコンが、数字処理する場合は、そういう解き方をしてると思いました。 情報処理では、そう習うと思いますが、 数学の問題だと、下記の方の通り、234以下で、2^nで最大の数→その余りで、2の階乗で最大の数・・・で、答を出します。
- taunamlz
- ベストアンサー率20% (175/843)
234/2=117余り0 117/2=58余り1 58/2=29余り0 29/2=14余り1 14/2=7余り0 7/2=3余り1 3/2=1余り1 1/2=0余り1 最後に、今までの計算の余りを下から読むと 11101010 となります。 2進数は 1.2.4.8.16.32.64.128.256・・・と言う数字を組み合わせて作ります。 大きい数字から当てはめて行けば答えを出すことが出来ます。 十進数の234は256より小さいのでそれ以上はすべて0 234には128はあるので1^7の部分は1、234-128=106 106には64はあるので1^6の部分は1、106-64=42 42には32はあるので1^5の部分は1、42-32=10 10には16が無いので1^4の部分は0、10のまま 10には8はあるので1^3の部分は1、10-8=2 2には4が無いので1^2の部分は0、2のまま 2には2はあるので1^1の部分は1、2-2=0 0には1が無いので1^0の部分は0、0のまま よって 1x2~7+1x2~6+1x2~5+0x2~4+1x2~3+0x2~2+1x2+0x1 と言う式が導きだすことが出来ます。 でも、これだと数字が大きくなると面倒なので、最初にやった÷2の計算で答えを出します。
補足
ありがとうございました。 なんとなくですが わかりました。 あと。ものすごく 基本的な ことなのですが。 なぜ 「余り」の 数字を 11101010と 書いたものが 二進法の 表示になるでしょうか。 べつに 「余り」でなくても 「234を2で割った.... 答えの 117」の方を 下から 書いていって、 0.1.3.7.14.29.58.117 と 書いて 二進法の 表示でも いいような 気がします。
お礼
10進法で 考えてくれたので 素人にも よくわかりました。 ありがとうございました。