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

会社から基本情報処理技術者試験の問題を入社前に独学で勉強するように言われています。そこで10進法を2進法に直す問題があります。
たとえば0.59375を10進法にすると
0.59375*2=1.1875小数部分のみを取り出し
0.1875*2=0.375小数部分を取り出し
0.375*2=0.75
0.75*2=1.5
0.5*2=1.0と小数部分が0になるまでやり今まで出てきた整数部分の0と1を上から並べ10011とします。
整数の10進法を2進法に直すときは割って出します。
ところでなぜ少数だと2をかけ整数だと2で割るのでしょうか。この理屈がよくわかりませんのでよろしくお願いします。

A 回答 (2件)

根本的なところが分からないと、訳が分からない操作をとりあえずすれば答えが出るようになるとしか理解できないよねぇ。


以下に小数点以下の数の場合の説明をするが、根本は整数も同じだ。

ある任意の少数点以下の数があった場合、その数は分数の合計で表すことが出来る。

 例えば、0.625は

 (1/2 + 0/4 + 1/8 + 0/16 + 0/32 + 0/64 + 0/128 + … )

なぜ分母が2の階乗の数なのか、何故分子が0の数も表記しているのか不思議に思うかも知れないが、後で分かる。
とりあえずはそういうものだと思って欲しい。
さてここからが、本題だ。
この数に2を掛けるとどうなるか。

 (1 + 0/2 + 1/4 + 0/8 + 0/16 + 0/32 + 0/64 + 0/128 … )

さて上記の数の"1"を取り除いて、もう一度2を掛ける。

 (0 + 1/2 + 0/4 + 0/8 + 0/16 + 0/32 + 0/64 + 0/128 … )

さて上記の数の"0"を取り除いて、もう一度2を掛ける。

 (1 + 0/2 + 0/4 + 0/8 + 0/16 + 0/32 + 0/64 + 0/128 … )

という数になる。
ここまで説明するとなんとなく分かってきたのではないかと思うが、2進数にした時の該当桁ビットが"1"なのかどうかを確認するために、2を掛けているのだ。

1/2 = 0.5 = 0.1(2)
1/4 = 0.25 = 0.01(2)
1/8 = 0.125 = 0.001(2)
1/16 = 0.0625 = 0.0001(2)

だということは知っているよね。
整数側も根本原理は同じことなんだ。
(整数側は宿題にしましょう。上記を参考に自分で考えてみてね)

 
    • good
    • 0
この回答へのお礼

ありがとうございます。1か0かの確認のためですか。0・625を参考に考えて見ます。

お礼日時:2009/12/17 17:04

「2を掛ける」とか「2で割る」ことによって2進数表示がどのように変化するかを考えてください.


やってることが結局は「目的とするビットをなんとかして 1の位に移動させること」である, ということがわかればいい.

この回答への補足

ありがとうございます。1の位への移動ですか。なるほど。1の位への移動を参考に考えて見ます。

補足日時:2009/12/17 16:43
    • good
    • 0
この回答へのお礼

回答補足のほうにお礼を書いてしまいました。すいません。ありがとうございます。1の位への移動ですか。なるほど。1の位への移動を参考に考えて見ます。

お礼日時:2009/12/17 16:57

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