アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在進数の小数点で詰まってます

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進数
この[通り]の場合の小数点の出し方を何方かご存知ないですか?
無ければ無い、あればあるで教えて頂けないでしょうか
扱う数字はいくつでも勿論結構です、宜しく御願いします

A 回答 (4件)

基本的に相互変換可能です。



> 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進数の変換に関しても、それと同じことをやっています。
    • good
    • 0

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にしているのは、
不必要な情報を消すためです。
    • good
    • 0

> 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)
    • good
    • 0

計算があっていないようです。


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進)数値の表現はこれとはちょっと違いますが。
    • good
    • 0

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