• ベストアンサー

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

現在進数の小数点で詰まってます 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