アプリ版:「スタンプのみでお礼する」機能のリリースについて

小数の10進数を2進数に変換するには、変換したい10進数の小数部を小数が0になるまで2倍するのはなぜでしょうか?

A 回答 (2件)

No.1 です。

ああ、「小数」の話ですね。

だったら「2をかけていく」でよいです。

n進数の小数「0.abcd」とは

 a × n^(-1) + b × n^(-2) + c × n^(-3) + d × n^(-4)

ということが分かれば、「整数」と逆のことをすればよいことが分かりますよね。「余り」の代わりに「桁上がり」をカウントします。

たとえば、10進数の「0.321」を2進数にしたいなら

 0.321(10) × 2(10) = 0.642(10) 桁上がり 0(2) (a)
 0.642(10) × 2(10) = 1.284(10) 桁上がり 1(2) (b) 残り 0.284
 0.284(10) × 2(10) = 0.568(10) 桁上がり 0(2) (c)
 0.568(10) × 2(10) = 1.136(10) 桁上がり 1(2) (d) 残り 0.136
 0.136(10) × 2(10) = 0.272(10) 桁上がり 0(2) (e)
 0.272(10) × 2(10) = 0.544(10) 桁上がり 0(2) (f)
 0.544(10) × 2(10) = 1.088(10) 桁上がり 1(2) (g) 残り 0.088
・・・・

とても「小数が 0」にはなりそうもないですね。
ここで、桁上がりを上からから a→b→c→d→e→f→g とたどって
 0.321(10) = 0.0101001・・・(2)

これが
 0(a) × 2^(-1) + 1(b) × 2^(-2) + 0(c) × 2^(-3) + 1(d) × 2^(-4) + × 0(e) × 2^(-5) + 0(f) × 2^(-6) + 1(g) × 2^(-7) + ・・・
を表していることが分かりますか?

上で「2をかけた」ものを元に戻すには「2 でどんどん割っていく」必要がありますからね。
    • good
    • 0

>変換したい10進数の小数部を小数が0になるまで2倍する



違うよ。「2で割る」でしょう。


何進数でも、それを「n進数」の変換したかったら、どんどん「n で割っていく」ことを繰り返せばよいのです。
「nで割ったら余りが出た」ら、その「余り」がその桁の値で、「商」がその「上の桁たち」になります。
その「上の桁たち」をどんどんnで割って、その桁の値とさらに上位の桁たちをどんどん求めていけばよいのです。
「商」が 0 となったら、それより上の桁はもうありません。

たとえば、10進数の「123」を2進数にしたいなら

 123(10) ÷ 2(10) = 61(10) (a) 余り 1(2) (b)
 61(10) ÷ 2(10) = 30(10) (c) 余り 1(2) (d)
 30(10) ÷ 2(10) = 15(10) (e) 余り 0(2) (f)
 15(10) ÷ 2(10) = 7(10) (g) 余り 1(2) (h)
 7(10) ÷ 2(10) = 3(10) (i) 余り 1(2) (j)
 3(10) ÷ 2(10) = 1(10) (k) 余り 1(2) (L)
 1(10) ÷ 2(10) = 0(10) (m) 余り 1(2) (n)

商が「0」になったので、これでおしまい。
これで、「余り」を「上の桁」から n→L→j→h→f→d→b とたどって
 123(10) = 1111011(2)

これが
 1(n) × 2^6 + 1(L) × 2^5 + 1(j) × 2^4 + 1(h) × 2^3 + × 0(f) × 2^2 + 1(d) × 2^1 + 1(b) × 2^0
を表していることが分かりますか?

上で「2で割った」ものを元に戻すには「2 をどんどんかけていく」必要がありますからね。
頭を冷やしてよく考えてみてくださいね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!