• ベストアンサー

進数の小数点をどう変換するのか

現在進数の小数点で詰まってます 2進数⇒10進数へ変換するときは 11.01011⇒ 1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5 2 +1 +0 +0.25 +0.125 +0.625 +0.3125 3+1.3125 4.3125 2進数⇒16進数へ変換するときは 11.01011⇒ B.0 |8+0+2+1| B.0B で良いと思ってます(間違ってたらすいません) ここで本題なんですが、小数点を含んだ進数で 2進数⇒8進数 8進数⇒2進数 10進数⇒2進数 16進数⇒2進数 この[通り]の場合の小数点の出し方を何方かご存知ないですか? 無ければ無い、あればあるで教えて頂けないでしょうか 扱う数字はいくつでも勿論結構です、宜しく御願いします

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

  • ベストアンサー
  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.3

基本的に相互変換可能です。 > 2進数⇒10進数へ変換するときは > 11.01011⇒ > 1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5 > 2 +1 +0 +0.25 +0.125 +0.625 +0.3125 > 3+1.3125 > 4.3125 計算結果が違います。 小数点以下の数字が1を超えることはあり得ません。 たぶん3.34375になるはずです。 > 2進数⇒16進数へ変換するときは > 11.01011⇒ > B.0 |8+0+2+1| > B.0B 2進数⇒16進数に変換するときは、小数点から4桁ずつに区切って考えます。 (2^4 = 16なので、2進数の4桁が16進数の1桁に対応する) 2進数の11.01011を16進数に直すには次のようにします。 (何もないところには0を埋めます) | 0011. | 0101 | 1000 | 2進数の0011に相当する16進数は3 2進数の0101に相当する16進数は5 2進数の1000に相当する16進数は8 2進数の11.01011は、16進数の3.58 10進数に直してみると、 3 + 5/16 + 8/256 = 3.34375 となり、元の10進数とも一致します。 16進数⇒2進数は逆の操作で行えます。 16進数3.58を1桁ずつに区切って、その数字に対応する4桁の2進数を当てはめればよいです。 16進数の3に相当する2進数は0011 16進数の5に相当する2進数は0101 16進数の8に相当する2進数は1000 つまり16進数の3.58は、2進数の0011.01011000(11.01011)になります。 2進数⇔8進数の相互変換も同様に行えます。 2^3 = 8なので、2進数の3桁が8進数の1桁に対応します。 つまり2進数を8進数に直す時には3桁ずつ区切ればよいです。 > 10進数⇒2進数 10進数小数を2進数小数に直すには、今までの方法とは別の手段を使う必要があります。 例 10進数の0.14を2進数に直す やり方は、0.14をどんどん2倍し、1の位を見ます。 1の位の数字が、小数点以下の位の数字になります。 (なお、3.14のような整数部分に0以外の数字をもつ数は、 整数部分(3)と小数部分(0.14)に分け、 それぞれ別々に2進数に変換し、最後にくっつけます。) (1) 0.14を2倍 → .28 繰り上がりがないので、2^(-1)の位は0 (2) 0.28を2倍 → .56 繰り上がりがないので、2^(-2)の位は0 (3) 0.56を2倍 → 1.12 繰り上がりがあったので、2^(-3)の位は1 1の位の数字を除去 (4) 0.12を2倍 → .24 繰り上がりがないので、2^(-4)の位は0 (5) 0.24を2倍 → .48 繰り上がりがないので、2^(-5)の位は0 (6) 0.48を2倍 → .96 繰り上がりがないので、2^(-6)の位は0 (7) 0.96を2倍 → 1.92 繰り上がりがあったので、2^(-7)の位は1 1の位の数字を除去 (8) 0.92を2倍 → 1.84 繰り上がりがあったので、2^(-8)の位は1 1の位の数字を除去 (9) …… といった感じです。 これは10進数の小数に10をかけて、 小数点を右隣に移すことと同じことをやっています。 2進数なら、2をかければ小数点が右隣に移るので今回は2倍です。 ではなぜ小数点を右隣に移すのか。 それは、少数点を1個ずつ右にずらしていけば、 1の位に小数点以下の部分の数字が順番に出てくるからです。 例えば3.14に10をかけると31.4です。 1の位を見ると、元の3.14の10^(-1)の位が現れます。 さらに31.4に10をかけると314です。 1の位を見ると、元の3.14の10^(-2)の位が現れます。 今回の10進数⇒2進数の変換に関しても、それと同じことをやっています。

その他の回答 (3)

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.4

ANo.3です。 10進数⇒2進数の変換方法の例(0.14を2進数に変換する例)の部分を訂正します。 ************************** 例 10進数の0.14を2進数に直す やり方は、0.14をどんどん2倍し、1の位を見ます。 1の位の数字が、小数点以下の位の数字になります。 (なお、3.14のような整数部分に0以外の数字をもつ数は、 整数部分(3)と小数部分(0.14)に分け、 それぞれ別々に2進数に変換し、最後にくっつけます。) (1) 0.14を2倍 → 0.28 1の位が0なので、2^(-1)の位は0 (2) 0.28を2倍 → 0.56 1の位が0なので、2^(-2)の位は0 (3) 0.56を2倍 → 1.12 1の位が1なので、2^(-3)の位は1 1の位の数字を除去 (4) 0.12を2倍 → 0.24 1の位が0なので、2^(-4)の位は0 (5) 0.24を2倍 → 0.48 1の位が0なので、2^(-5)の位は0 (6) 0.48を2倍 → 0.96 1の位が0なので、2^(-6)の位は0 (7) 0.96を2倍 → 1.92 1の位が1なので、2^(-7)の位は1 1の位の数字を除去 (8) 0.92を2倍 → 1.84 1の位が1なので、2^(-8)の位は1 1の位の数字を除去 (9) …… ************************** 以上です。失礼しました。 なお、手順(3)(7)(8)で1の位の数字(1)を除去して0にしているのは、 不必要な情報を消すためです。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.2

> 11.01011⇒ > 1*2~1+1*2~0+0*2~-1+1*2~-2+0*2~-3+1*2~-4+1*2~5 × 1*2^1+1*2^0+0*2^(-1)+1*2^(-2)+0*2^(-3)+1*2^(-4)+1*2^(-5) > 2 +1 +0 +0.25 +0.125 +0.625 +0.3125 × 2 +1 +0 +0.25 +0 +0.0625 +0.03125 >3+1.3125 × 3.34375 >4.3125 × 別解) 11.01011⇒(1101011)/2^5=(64+32+8+2+1)/32=3+11/32=3.34375 > 11.01011⇒ > B.0 |8+0+2+1| × (0011 |.0101 | 1000) =3.58 > B.0B × 4桁区切りは小数点を基準に行う事 > 2進数⇒8進数 小数点の位置を基準に3ビットずつに区切り、それぞれを8進数に変換 > 11.01011⇒(011 |. 010 | 110)=3.26 > 8進数⇒2進数 8進1桁を3ビットの二進数に変換して並べるだけ > 3.57⇒011.101 111 > 10進数⇒2進数 10.375⇒8+2+0.75/2=8+2+1.5/4=8+2+1/4+1/8=110.011 > 16進数⇒2進数 16進1桁を2進4ビットに直して並べるだけ A5.3C⇒(1010 0101 . 0011 1100)=(10100101.001111)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

計算があっていないようです。 2進数⇒10進数 11.01011 →1*2^1+1*2^0+0*2^(-1)+1*2^(-2)+0*2^(-3)+1*2^(-4)+1*2^(-5) =2+1+0+0.25+0+0.0625+0.03125=3.34375 2進数⇒16進数 11.01011 →(1*2^1+1*2^0)*16^0+"."+(0*2^3+1*2^2+0*2^1+1*2^0)*16^(-1)+(1*2^3)*16^-2 =(3.58) (=3*16^0+5*16^(-1)+8*16^(-2)=3.34375) 2進を4桁ずつ区切って計算。 何でこんな計算をしているのかわかりませんが、趣味ですか。 もし、コンピュータがらみの計算なら、このような小数点つきの8進や16進の計算は意味がありません。2進の小数点部分の10進変換ができれば十分でしょう。コンピュータの小数点つきの(2進)数値の表現はこれとはちょっと違いますが。

関連するQ&A

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

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

  • 浮動小数点法での2進数変換

    浮動小数点法を用いての2進数への変換に関して質問です。 10進数の(-0.0001)を浮動小数点表示を用いて2進数に変換しなさいという問題が全くわかりません。 どなたか詳しく解説してください。お願いします。

  • 浮動小数点変換

    (1)次の数値をIEEE754単精度形式で正規化された浮動小数点に変換し、結果を8桁の16進数で表記しなさい。 (a)0.5 0.5を二進数で表すと0.1 0.1*2^0であるから 0 00000000 10000000000000000000000 (b)1.0 1.0を二進数で表すと1.0 0.1*2^1であるから 0 10000000 10000000000000000000000 (c)1.25 1.25を二進数で表すと1.010 0.101*2^1であるから 0 10000000 10100000000000000000000 浮動小数点への変換、あってますでしょうか? また結果を8桁の16進数で表記とありますが 0.5だったら16進数で表すと0.9?これを8桁*16^なんとか乗で表すということでしょうか?

  • 10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか?

    10進数の14.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか? 10進数の-7.5を浮動小数点(IEEE754形式)の2進数に変換するにはどうしたらよいでしょうか? 計算方法を教えてください。

  • 小数点⇔n進数のやり方

    いつもお世話になっております。 早速ですが、VB2008にて小数点⇔n進数のやり方がわからず困っています。 16進数 404ccccd 10進数 1078774989 2進数 1000000010011001100110011001101 小数点に変換すると3.2になるはずですが、やり方がわかりません。 CONVERTやbitconverter等試してみたのですがうまくいきません。 ネットで検索し、小数点からn進数は見つけたのですが、逆の方法が見つかりません。 逆演算すればとも思ったのですが、いまいちうまくいかず質問させていただきました。 宜しくお願いいたします。

  • エクセルで、小数点は、全て切り上げて、変換する方法は??

    お世話になります。 エクセルで、小数点は、全て切り上げて、変換する方法を教えて下さい。 例) 1.5  → 2 に変換 1.001 → 2 に変換 このように、小数点があれば、全て繰上げて変換したいです。 セル縦方向に、 20個の小数点付きの数字が並んでいます。 その、横のセルに、各々の、変換された 繰上げ数字を、表示させたいです。 あまり、エクセルに詳しくないので、よろしくお願いします。

  • 小数の10進数を2進数に変換する方法

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

  • 基数変換 (小数)

    8進数の27.8と16進数の3C.Bを加算した結果を、16進数で表したものはどれか。という問題をやっていたのですが、小数の場合の8、16進数の変換の仕方が分かりません。サイトで調べたのですが分かりやすい説明の仕方をしたサイトがありませんでした。なので、良ければ詳しく教えていただけないでしょうか?(2進数から10進数への小数変換は分かります。例10.10 = 2.5) 分からない事〔8進数から2進数へ変換 例27.8→?〕 〔16進数から2進数へ変換 例3C.B→?〕

  • 小数点を含む2進数を10進数に変換する方法

    小数点を含む2進数を10進数に変換するさいに 小数点以下は右にいくにつれ-2、-3と2の上に累乗を付けるというところまでは理解できました。 そして0は計算せず、1の付く部分のみ計算する、そして1は分子で累乗の計算結果が分母であることも理解しました。 さらに分子÷分母で導き出された数を足すという理屈も理解しました。 しかし、分子÷分母の計算結果が理解できません。 1÷2が0.5は分かります。 10÷2とした時の答えが5なので… しかしそこから先の計算結果がなぜそうなるのか理解できません。 上記の簡単な計算方法はありますか? また、参考書にあった以下の式でなぜ下2桁の75が生まれたのか理解できません。 2+0.25+0.125=2.375 こちらも分かりやすくどなたが解説していただけないでしょうか…( ;∀;)

  • 固定小数点で0.1?

    10進から、2進数、16進数に変換するのによくわからないことがあります。 固定小数点で0.1はどのように表せるのでしょうか? どなたかわかりやすく教えてください。お願いします。