- ベストアンサー
10進数→n進法変換の方法とは?
- 10進数をn進法に変換する方法について解説します。整数と小数の変換方法の違いについても触れます。
- 整数の場合は小さい桁からまとまりを作り、余りを1の位の値にします。一方、小数の場合は大きい桁からまとまりを作ります。
- 整数と小数でまとまりを作る順序が異なる理由については詳しくはわかりませんが、これは数の表現方法の特性に関係していると考えられます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1さんと、ほぼ同じ内容の回答になりますが。 >なぜ整数では、小さい桁から、まとまりを作っていくのに >小数では大きい桁から、まとまりを作っていくことになるのでしょうか? 重要なのは、まとまりを作る、ことであって、実際には、どういう順番でまとまりを作るかはどうでもいいです。 別に、整数部分を大きい桁からまとまり作ってもいいですし、小数で小さい部分からまとまりをつくっても全くかまいません。 たとえば、27という10進数の数を2進法にする場合に、最も大きい桁からまとまりを作っていけば、 27に、2^4=16が1個含まれる 27-16=11に、2^3=8が1個含まれる 11-8=3に、2^1=2が1個含まれる 3-2=1に、2^0=1が1個含まれる ということで、2進数で11011となることがわかります。 また、0.8125という10進数の数を2進法にしたい場合に、最も小さい桁からまとまりを作っていけば、 0.8125に、2^(-4)=0.0625が1個含まれる 0.8125-0.0625=0.75に、2^(-2)=0.25が1個含まれる 0.75-0.25=0.5に、2^(-1)=0.5が1個含まれる ということで、2進数で.1101となることがわかります。 で、ここで問題なのは、整数の場合だったら、最初に、最も大きい桁として、 ・27に、2^4=16が1個含まれる といったわけですが、最も大きい桁が2^4であることをどうやってみつけるかってことです。 27くらなら、最も大きい桁が2^4であることはパッと見でわかりますが、 たとえば、10進数 123456789 を、2進数に変換したときの最も大きい桁は何か、とかすぐにわからないでしょう(答えは、2^26) 同様に小数の場合だったら、最初に、最も小さい桁として、 ・0.8125に、2^(-4)=0.0625が1個含まれる といったわけですが、最も小さい桁が2^-4であることをどうやってみつけるのか。 ここで、ちょっと頭を少しひねると、 どんな数(整数だろうと小数だろうと)であっても、小数点の位置(2^0=1)というのは固定であるわけで、 まとまりを作る順番は自由に決めてよいなら、小数点(2^0=1)の位置で最初にまとまりを作って、そこから両側にむかって、まとまりを作っていけば、最も大きい桁は何か?、とか、最も小さい桁が何か?、とかを考える必要がなくなる、ってことに気づきます。 それがつまり、 >整数では、小さい桁から、まとまりを作っていくのに >小数では大きい桁から、まとまりを作っていくことになる という方法です。
その他の回答 (4)
- bgm38489
- ベストアンサー率29% (633/2168)
訂正します。小数の変換のところで、2で割った余りとか書きましたが、2^(-1)で割って、商ができるか、ということです。
- stomachman
- ベストアンサー率57% (1014/1775)
○Xのn進法表現の小数部分のp桁目は Xを(n^p)倍したものの整数部分をnで割った余り。 ○Xのn進法表現の整数部分のq桁目は Xを(n^(1-q))倍したものの整数部分をnで割った余り。 p=1-qと書けば、どっちも全く同じです。つまり、「『小数部分のp桁目』とは『整数部分の1-p桁目』と同じことだ」と考えることにすればいいんです。 さて、n倍することをp回繰り返せば(n^p)倍したことになる。nで割ることをq-1回繰り返せば(n^(1-q))倍したことになる。 この性質を使うと、別の桁を算出するために行った計算の結果を旨く再利用することで手間が減らせます。 たとえば、もしXが(n^R)以下であると分かっているのなら、まず(n^R)を計算しておいて、整数部分のR桁目, R-1桁目, …, 1桁目, 小数部分の1桁目, 2桁目,… という順に決めて行くと、計算の結果を再利用して効率よく計算できる。ですが、Rが分からない状況では、この手は旨くないですよね。 一方、n倍することを1回,2回,…と繰り返せば、(n^1)倍、(n^2)倍、…の順で計算され、nで割ることを0回,1回,2回,…と繰り返せば、(n^0)倍、(n^(-1))倍、(n^(-2))倍、…の順で計算される。だから、整数部分と小数部分のそれぞれについて、小数点に近い方から順に計算していくと、計算結果の再利用が旨く出来るし、Rが未知でも良いし、そして最初に(n^R)を用意する必要もない。というのが、ご質問にお書きの手順ですね。
- bgm38489
- ベストアンサー率29% (633/2168)
n進法の原理は理解されてますか? 10進法の場合、 123=1*10^2+2*10^1+3*10^0 0.123=1*10^(-1)+2*10^(-2)+3*10^(-3) です。 2進法の場合、各位が、下の位から見ていけば、10進法でいう(ここが大事!)2^0,2^1,2^2…となっているわけです。小数だったら、上の位から見て、2^(-1),2^(-2),2^(-3)…となっています。 整数では、小さい桁からまとまりを作っていくと言いますが、実は最終的に何回割れるか、試している過程で、出てくる余りを小さい桁の数にあてている、ということなのです。 2進法ではわかりにくいと思うので、10進法で考えましょう。 234を10で割れば商は23あまり4。23を10で割れば、商は2あまり3。2を10で割れば、商は0余り2。逆向きに見ていくと、10^2の位には、10^で3回割った余り2が来て、10^1の位には10で2回割った余り3が来て、10^0の位には、10で1回割った余り4が来るわけです。 2進法では、割ることができたなら、その位に1がくるとなります。 進法の変換の原理は、整数の方がわかりにくい。 2の累乗数(2,4,8,16,32,64,128,256…)が頭に入っていれば、10進法で与えられた数から、一番大きい2の累乗数を引いていけば、簡単に求められますがね。このやり方の方が、原理を理解するうえでもわかりやすい。というか、このやり方から、筆算的に求める方法として、一般的なやり方が考案された、とみるべきでしょう。 小数の変換は簡単なものです。大きな数が、一番左にくるのですが、これがn^(-1)なのですから。0.75を2進法に直す場合、 0.75=0.5+0.25=2^(-1)+2^(-2)から、0.11となります。これは、2で割って、さらに2で割ってとしていっても、同じことです。はじめに2で割った余り、というか割ることができたかどうかの結果が来て、さらに2で割ることができたどうかのの結果が…後から読み直す必要がありません。 整数の変換がわからなかったら、小数の変換のから理解するほうが近道だと思います。 ただし、何でも変換できるわけではないので、ご注意あれ。2進数はみな10進数に変換できますが、反対は無理なことの方が多い。例えば、0.1。これを2^(-n)の形の和にすることは、無理です。0.0625+00.3125+…
- jungsuki
- ベストアンサー率0% (0/1)
回答の前に予備知識として、乗数について。(もしわかってたら飛ばしてくれて構わないです) ここで言っている乗数とは、いわゆる「2の2乗」とか「2の3乗」とかのことです。 (ここでは簡単のために、「2の2乗」のことを「2^2」、「2の3乗」のことを「2^3」と表すことにします) つまり 2^2 は 2×2 = 4 2^3 は 2×2×2 = 8 2^4 は 2×2×2×2 = 16 となります。 実は乗数の「何乗」の部分は「正の整数」以外にも「負の整数」や「0」なんかを入れてもいいのです。 (もっというと分数や小数を入れてもいいのですが、ここではややこしいのでやりません) その場合どうなるかというと 2^0 は 1(2が一つもかけられていない) 2^-1 は 1÷2 = 1/2(0.5) 2^-2 は 1÷2÷2 = 1/4(0.25) となります。まとめると乗数は 2^3 は 8 2^2 は 4 2^1 は 2 2^0 は 1 2^-1 は 1/2 2^-2 は 1/4 となります。 ここから本題。pseudonym2013さんの質問の話にもどすと (2進法などへの変換の話に戻すと) 整数(整数部分)の場合は2の「正の整数」乗部分の「絶対値の小さい順(数の小さい順)」 つまり「2^0(1)、2^1(2)、2^2(4)、……」という順でまとまりを作っていくのに対し、 小数(小数部分)の場合は2の「負の整数」乗部分の「絶対値の小さい順(数の大きい順)」 つまり「2^-1(0.5)、2^-2(0.25)、2^-3(0.125)、……」という順でまとまりを作っていく という風に考えたら少しはすっきりしないでしょうか。 参照URLは乗数の話のもうちょっとわかりやすい説明がのっています。
お礼
皆様、丁寧な説明ありがとうございました。 理解することができました。