10進数→n進法変換の方法とは?

このQ&Aのポイント
  • 10進数をn進法に変換する方法について解説します。整数と小数の変換方法の違いについても触れます。
  • 整数の場合は小さい桁からまとまりを作り、余りを1の位の値にします。一方、小数の場合は大きい桁からまとまりを作ります。
  • 整数と小数でまとまりを作る順序が異なる理由については詳しくはわかりませんが、これは数の表現方法の特性に関係していると考えられます。
回答を見る
  • ベストアンサー

10進数→n進法の変換 整数と小数の違いについて

整数の場合 27という10進数の数を2進法にしたい場合 2で割り、2のまとまりを作り余りが出来ると、それを1の位の値にする と、このようなことを繰り返すことで2進法の表記を作り上げると思います。 小数の場合 0.8125という10進数の数を2進法にしたい場合 2を掛ける(=0.5で割る) ことで 0.5のまとまりを作り、商の整数部分を0.5のまとまりと考え少数第一位の値とする と、このようなことを繰り返すことで2進数の表記を作り上げると思います。 と、ここまでは理解できたのですが なぜ整数では、小さい桁から、まとまりを作っていくのに 小数では大きい桁から、まとまりを作っていくことになるのでしょうか? この疑問を自分の中でうまく言葉に出来ず、もどかしいので説明できる方がいましたら 私のレベルでも理解できるように説明していいだけないでしょうか。 よろしくお願いします。

noname#188197
noname#188197

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

#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)の位置で最初にまとまりを作って、そこから両側にむかって、まとまりを作っていけば、最も大きい桁は何か?、とか、最も小さい桁が何か?、とかを考える必要がなくなる、ってことに気づきます。 それがつまり、 >整数では、小さい桁から、まとまりを作っていくのに >小数では大きい桁から、まとまりを作っていくことになる という方法です。

noname#188197
質問者

お礼

皆様、丁寧な説明ありがとうございました。 理解することができました。

その他の回答 (4)

  • bgm38489
  • ベストアンサー率29% (633/2168)
回答No.5

訂正します。小数の変換のところで、2で割った余りとか書きましたが、2^(-1)で割って、商ができるか、ということです。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.4

○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)
回答No.3

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)
回答No.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は乗数の話のもうちょっとわかりやすい説明がのっています。

参考URL:
http://www.excel.studio-kazu.jp/tips/0032/

関連するQ&A

  • 10進法の少数→ n進法の少数への変換について

    整数の場合は 例えば27という10進法の数を2進法に変える場合 27から2で割っていき余りを並べることで求められますが これは2で割っていき、まとまりを作っていく事で、余りが各桁の値を表すことになるから ということで理解できたのですが 少数の場合はなぜ掛けるのでしょうか? 例えば0.111という10進法の少数は2進法では 1/2^1 + 1/2^2 + 1/2^3 このように表すことが出来るから2を掛けることで値が抜き出せる とこのような考え方は理解できるのですが 上に整数の場合で書いたように説明することは出来ないでしょうか?

  • 小数の10進法→n進法の考え方について

    整数の10進法→2進法の場合 27という数字を2で割るのは 2で割ることで 2個ずつまとめた塊をつくり その塊に入れなかった余り1が「1の桁」になる そしてその塊13を2で割ると「26を2個ずつまとめたセット」を2個ずつまとめた塊6個を求めることが出来て、その余りはもともと「2個ずつまとめた塊」だから、その余り1は「2^1=2の桁になる」 というように考えられると思うのですが 小数の場合をうまくイメージすることが出来ません。 この同じ考え方を小数にあてはめて考えてみたのですが、小数のためややこしくなってしまい混乱してしまいました。 小数の変換を「10進法→n進法」をこのようにうまく理解する方法は無いでしょうか? よろしくお願いします。  

  • 小数の 10進数→n進法の変換  について

    先日このことに関して質問をさせてもらったのですが その中で 10進法の小数をn進法に変換する場合 普通は、大きい桁からまとまりを作っていくと思うのですが 小さい桁からまとまりを作って求めることも出来るというように回答をいただいたのですが 「 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となることがわかる    」 これは、それぞれどのように計算をして求めているのでしょうか? 自分で計算してみたのですがよくわかりませんでした。 よろしくお願いします。

  • 10進法からn進法へ変換する時の操作

    10進法の数をnで割っていき、余りを並べることで求めたい数字を導き出すことが出来ますが なぜそうなるのかが、よく理解できません。 n進法 → 10進法  の説明は、検索すると、わかりやすくその理屈が説明されているのですが 10進法 → n進法 は「割っていき並べればその数字になるんだ」 としか、どのページでも説明されておらずいまいち理解が出来ません。 10進法の27という数の、「2進法での数の動き」 を 10進法表記で表すとこのようになっている。 2^4×1 + 2^3×1  + 2^2×0 + 2^1×1 +2^0×1  =27 (10進法表記) 2進法表記ではこのようになっている。 10000×1  +  1000×1 + 100×0 + 10×1 + 1×1 = 11011 (2進法表記) このように、10進法表記でも2進法表記でも、各位の値は同じなので 位を外して、各位の値だけを並べれば27の2進法表記である 10011 を導き出すことが出来る。 位の数で割っていくことで各位の値だけを抽出することが出来る。 このように理解するしかないのでしょうか? よろしくお願いします。

  • 小数の10進法→n進法の変換について

    小数の10進法→n進法の変換の時 だいたい参考書に書かれているのは、 例えば0.8125という10進法の数を2進法表記で表したい場合 この0.8125を1/2で割っていき求めていくやり方だと思うのですが 分数の形のまま、求めることは出来ないのでしょうか? 例えば 0.8215 という10進数の小数は 分数の形にすると 8/10^1 + 2/10^2 + 1/10^3 + 5/10^4 = 8125/10000 この8125/10000 という状態から 1/2を使って  2進法表記を求めることは出来るのでしょうか?

  • 小学算数・・整数の問題・・教えてください

    何度考えてもしっくりいきません。分かりやすい解答をおしえてください。ww ある2桁の整数を8と9で割ります。その時の商の小数第一位をそれぞれ四捨五入すると同じ値になりました。 (1)この時の2桁の整数の中で最大の物を求めなさい。 (2)このような2桁の整数は全部で何個ありますか。 (2)の場合、解答では商の小数第一位を四捨五入して、整数部分の「一の位」が9になるとき、8になるとき、という風に、大きい順に試し、その個数を足し合わせています。理解できません。(^^;; 無論(1)の場合も商の小数第一位を四捨五入して、9になる数、8になる数、7になる数という風にそれぞれ試しているのですが、何故そのようにするのかわかりません(;;) なぜでしょうか? また、 もっと分かりやすい方法があれば大感激です。 ヨロシクお願いします。

  • 小数と2進法

    何進法の表記かわからないので、質問します。 問題は、 0<α<1となる数αに対し、2^(n-1)αの小数部分は、(*){nが奇数のときは、1/2以上、nが偶数のときは、1/2未満}を満たすという。(ただし、n=1,2,3・・・)二進法の考えを用いて、αの値を求めよ。 解答は、 与えられた条件(*)は、αを二進小数で表したときの小数第n位が{nが奇数のときは、1、nが偶数のときは、0}であることをを意味する。したがってαの二進小数表示は、α=0.101010・・・(1)という循環小数である。周期が2桁であるので、αを2^2=4倍し4αは、二進法で 10.101010・・・(2)と表されることから、(2)-(1)であるαの3倍は、二進法で10と表される。すなわち十進法の2である。ゆえに 3α=2 より α=2/3 この問題でα=0.a_1a_2a_3a_4・・・a_n・・・と表される小数は、10進法に限られるのか?三進法や八進法でよいのか?が疑問です。αは十進法であらわされるとは問題に書かれていないので、迷いました。 10進法の小数に2をかけると、その整数部分が二進法の小数第一位になるということなので、αは十進法の小数かと思いましたが、はっきりしません。どなたかαは十進法の表記なのか、その他の底の表記でもよいのか教えてくださいお願いします。

  • 10進数から2進数への変換の仕方について

    10進数から2進数への変換の仕方について 以下のサイトに説明があったのですが、 http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm 10進数の60を2進数に変換する場合、変換したい10進数を商が0になるまで2で割りつづけ商と余りを求めていますが、その時に、15/2などは7.5になり余りが、説明では商が7、余りが1になっています。 10進数から2進数へ変換する場合は、小数点以下の余りはすべて1として計算するのでしょうか?

  • 小数点を整数型に変換

    ・8.7  ・14.5 ・3.456 などのデータがあり、この値を四捨五入 などをせずに 「整数2桁 + 小数5桁」に変換したいのですが、String.Formatなどで行うと意図した値になりません。 ・8.7 ⇒ 87.00000 ・14.5 ⇒ 14.50000 ・3.456 ⇒ 34.56000 何か良い方法がありましたら、アドバイスを頂けないでしょうか。 言語:C# VisualStudio 2008 以上、よろしくお願い致します。

  • 小数の10進法→n進法への変換について

    例えば 0.304という10進法の数を5進法に変える時に 5をかけて1の位に出てきたものを並べて5進法の小数に変えますが 自分の使ってる参考書に 0.●●●の0の部分は10進法からn進法に変える時にそのままでいいというように 書かれているのですが 10進法で0.●●●という数でもn進法では1.◎◎◎というようになったりする事はあり得ないのですか? 出来ればその理由も教えてほしいです。 よろしくお願いします。