• 締切済み

2、8、10、16進数に変換(小数点)

10進数や2進数や8進数や16進数に変換する場合、 小数点以下を変換できません。 方法はありませんか?

みんなの回答

noname#36302
noname#36302
回答No.3

細かい証明は知りませんが、一応参考に・・・ 例えば、10進数14.375を2進数に直す場合、こんな方法があります。  手順 1.整数部と小数部は分けて計算する。 ここで先に14を直すと 1110となります。    つぎに小数部について考えます。   2.小数部に2をかける。この場合、0.375*2=0.75となります。 ここで、出た値の整数部分が1以上       (2進数の場合は1、基数がn⇒n以上)⇒    その整数部分を取り出して値を小数にしてまた2をかける。    それ以外(整数部分=0) ⇒ 0を取り出して(言い方が変です   が)また2をかける。    今回の場合、後者ですから、 0.75*2=1.5となります。    これが最終的に0になるまで繰り返します。    1.5-1=0.5 0.5*2=1 1-1=0  ここで整数部分が0になったので、   3.取り出した順に並べる。この場合取り出した値は順に、011です から、頭に"0."をつけて答えは0.011となります。   これを筆算で表すと、    0.375 zzzzzz* 2 0 ← 0.750 ↓zzzz* 2 1 ← 1.500 → 0.500 ↓zzzzzzzzzzzzzz* 2 1 ←zzzzzzzzzzz 1.000 → 0.000 = 0 → 0.011(うまく表せなくてスイマセン) 4.整数部と小数部をあわせる。この場合1110と0.011をくっつけて 答えは1110 . 011となります。  今回は、2進数なので2を基数としてやりましたがこれがn進数の場合は、基数をnに変えればどんな数でも変換することができます (整数部分でも同様。但し、基数が10以上の場合は10以上の数を見やすくするため別の文字でくくる場合がある。例えば 10 → A など)。  最後に8,16進数の場合ですがこれらの値は2進数を3桁,4桁ごとに区切った値ですから10進数から2進数に直すことができれば、  i) 8進数の場合   1110 . 011を3桁ごとに区切って(整数部分は←方向に、小数部分は→方向に区切るもしも足りない場合は0を補う)この場合、   1 110 . 011 → 001 110 . 011 となりますからそれぞれ8進数に直して、 16 . 3となりますし、 ii)16進数の場合  でも同様で、   1110 . 011を4桁ごとに区切って   1110 . 011 → 1110 . 0110 となりますからそれぞれ16進数に直して、 E . 6となります。  かなり長くなってしまいましたがどうでしょうか?  

  • kkkk2222
  • ベストアンサー率42% (187/437)
回答No.2

文面から見ますと、変換は貴殿の方が慣れているようで。 10進法 100=10^2 10=10^1 1=10^0 0.1=10^(-1) 0.01=10^(-2) 0.001=10^(-3) ー 2進法 0.1→2^(-1)=0.5 0.01→2^(-2)=0.25 0.001→2^(-3)=0.125 0.0001→2^(-4)=0.0625 0.00001→2^(-5)=0.03125 ー 8進法 0.1→8^(-1)=0.125 0.01→8^(-2)=0.015625 0.001→8^(-3)=0.001953125 ーーー 2進法→10進法 0.111→ 0.5+0.25+0.125=0.875 --- 10進法→2進法 0.1=(1/10)=(1/2^4)+(1/2^5)+(1/2^8)+(1/2^9)+・・・ 0.1→0.0001100110011・・・ 0.2→0.0011001100110・・・ 0.4→0.0110011001100・・・ 0.8→0.1100110011001・・・ 0.3=0.1+0.2などなど 意外に面倒で、この辺までにします。 ーーー

  • fjnobu
  • ベストアンサー率21% (491/2332)
回答No.1

10進数の、少数以下を8進数に変換する場合は、少数以下の数値を8倍します。少数より上を8進数に変換します。 次に残った少数以下を、8倍して8進数に変換する。以上を繰り返して、少数以下が0になるまで繰り返すと求まります。 他の場合も同じです。

関連するQ&A