プロが教えるわが家の防犯対策術!

この問題の解き方教えてください!
次の10進数の分数を2進数の少数で表せ。

8分の1 4分の13

A 回答 (3件)

No.1です。

失礼しました。問題文を見誤っていました。
 10進数の分数 → 2進数の小数
ということですね。
「2進数の分数」ではなく。しかも「13/4」を「4/13」にしているし。(さらに「小数」が「少数」だし・・・)。
#1 は無視してください。

例題の場合には、分母が「2の累乗」の形なので、#2 さんのように「小数点のシフト」で簡単に解けます。

10進法が、
・10 をかける → 1桁上にシフトさせる。たとえば「12345 → 123450」
・10 で割る → 1桁下にシフトさせる。たとえば「12345 → 1234.5」
というのと同じで、

2進法では
・2 をかける → 1桁上にシフトさせる。たとえば「1011 → 10110」
・2 で割る → 1桁下にシフトさせる。たとえば「1011 → 101.1」
ということですから。

一般の場合には、10進数の分数を、一度#1 に書いたような小数 0.abcde
 a * 10^(-1) + b * 10^(-2) + c * 10^(-3) + d * 10^(-4) + e * 10^(-5)
にして、これを
 f * 2^(-1) + g * 2^(-1) + h * 2^(-1) + i * 2^(-1) + j * 2^(-1) + k * 2^(-1) + ・・・
に置き換えます。
かなりやっかいで、しかも「無限小数」になることもあります。
    • good
    • 0

少数を含む2進数への変換は面倒なのですが、分母が2、4、8、16・・・のような2のべき乗であれば簡単な方法があります。


すなわち分子の部分を2進数に変換したあと、小数点位置をずらせるのです。左に1つずらせると2で割ったことになり、2つずらせると4で割ったことになります。
逆に右に1つ移動すると2倍したことに、2つだと4倍、3つだと8倍です。
これ、覚えておくと便利ですよ。

1/8・・・10進数1は2進数で1。これを8で割るので小数点を左へ3つ移動して 0.001 が答。

13/4・・・13は2進数で 1101。4で割るので小数点は左へ2つ移動して 11.01 が答。
    • good
    • 0

n 進数の abc.de は


 a * n^2 + b * n^1 + c * n^0 + d * n^(-1) + e * n^(-2)
ということです。

このように考えれば、10進数の分数
 (1/abc)[10]
は (abc)^(-1) ですから
 (a * 10^2 + b * 10^1 + c * 10^0)^(-1)
と書けることが分かります。

これを、2進法で
 (1/defghk)[2]
と書けたとすると、これは
 (defghk)^(-1)[2] = {(defghk)[2]}^(-1)
ですから
 a * 10^2 + b * 10^1 + c * 10^0 = d * 2^5 + e * 2^4 + f * 2^3 + g * 2^2 + h * 2^1 + k * 2^0
という換算をすればよいことになります。
これは単純な「進数変換」です。

つまり
 (1/8)[10] = (1/1000)[2]
ということです。

10進数の分数
 (abc/defgh)[10]
も同じように考えれば
 (abc)[10] * (1/defgh)[10]
ですから、分子・分母をそれぞれ2進法にすればよいことになります。

従って
 (4/13)[10] = (4)[10] * (1/13)[10] = (100)[2] * (1/1101)[2] = (100/1101)[2]
    • good
    • 0

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