- 締切済み
n進小数?
先日、学校で2進数について習ったのですが、宿題でn進小数を2、8、16進数に変換する問題がでてぜんぜん解けなくて困ってます。どなたか、教えてください。 (98.75)10を2、8、16進数に (1A.C)16を2、8、16進数に (12.14)8を2,8,16進数に の3問でお願いします。(xxx)8は、8進数でxxxと表現しました。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- starflora
- ベストアンサー率61% (647/1050)
n進数というのは、或る桁に数字があると、それが、何桁目かによって、nの何乗という数字をその桁の係数にかけて合計を出すと、とりあえず、10進数に換算できます。そこで、10進数で表現されている数字を、今度はm進数に変えようとすると、mで順番に割って行き、余りで、最初の桁から順番にその桁の係数を計算して出します。具体的に次のように計算します。 例えば、98.75 /10/ なら、2で割ると、98は49になり余りがありません。これは最初の桁が、0ということです。最初の桁とは、一桁目です。次に49を2でまた割ると、24……1 となります、つまり、二番目の桁、第二の桁は1です。24をまた2で割ると、割り切れます。ということで: 98/2=49……0 49/2=24……1 24/2=12……0 12/2= 6……0 6/2= 3……0 3/2= 1……1 1/2= 0……1 ということで、1より大きい部分は、1100010 になります。これは、 1*2^6+1*2^5+0*2^4+0*2^3+0*2^2+1*2^1+0*2^0=64+32+0+0+0+2+0=98 ということで、この計算でよいことが分かります。(注:0100011 でないのに注意)。 少数の方も同じで、違うのは、1/2が幾つあるか、1/4が幾つあるかという計算になり、これは、1/2で割ることなので、丁度、その逆数の2を掛けて行くことになります。 0.75X2=1.5……1と0.5 0.5 X2=1……1と0 です。 つまり、1*(1/2)^1+1*(1/2)^2=1/2+1/4=0.5+0.25=0.75 だから、2進数で、小数点の部分は、0.11 になります。 上の結果と合わせると(98.75)10=(1100010.11)2 が答えです。 8進数、16進数も同じように計算してもよいのですが、ここは頭を使います。 2^3=8,2^4=16 というのを利用します。((1/2)3=1/8,(1/2)4=1/16 も使います)。 (98.75)10=(1100010.11)2=1*2^6+1*2^5+0*2^4+0*2^3+0*2^2+1*2^1+0*2^0+1*(1/2)^1+1*(1/2)^2 でしたから、 2^6=(2^3)*(2^3)=8^2*1 2^5=(2^3)*(2^2)=8^1*4 2^1=8^0*2 で、少数でない部分は、142となります。 また少数部分は、(1/2)3=1/8 ですから、 1*(1/2)^1+1*(1/2)^2=4*(1/8)^1+2*(1/8)^1=(0.6)8 となり、合計すると、 (98.75)10=(142.6)8 が答えです。 16進数換算は、2^4=16,(1/2)^4=1/16 を使って同じように計算します。 (98.75)10=(1100010.11)2=1*2^6+1*2^5+0*2^4+0*2^3+0*2^2+1*2^1+0*2^0+1*(1/2)^1+1*(1/2)^2 =4*2^4+2*2^4+2*2^0+8*(1/2)^4+4*(1/2)^4=(62./12/)8=(62.C)8……Cは12です。 (98.75)10=(62.C)8 が答えです。 ここで、2進数を8進数にする場合は、三桁づつ分ければよく、16進数の場合は、四桁づつに分ければよいという技術が出てくるのです。どうしてそうなるかは、以上の計算方法を考えると、分かると思います。(よく考えてください)。 この三桁づつ分ける、四桁づつ分けるというのを使うとどうなるかは、 (98.75)10=(1100010.11)2=(1|100|010.110|)2=(142.6)8 (98.75)10=(1100010.11)2=(110|0010.1100|)2=(62./12/)8=(62.C)8 となって、簡単に計算できます。三桁づつ、四桁づつ切った中で、2進数の合計を計算して、これを、その桁の数字にすればよいのです。まず、2進数にすると、8進数と16進数は、こんな風に簡単に計算できます。 >(1A.C)16を2、8、16進数に (1A.C)16=1*16^2+10*16^0+12*(1/16)^1 =(|0001|1010.1100|)2=(11010.11)2 いきなり答えがでますが、これは何をしたかというと、16進数→2進数の上で述べた、桁を四つごとに分けることの逆をしたのです。2進数から16進数へと進んで見ると、そういう計算をしているのが分かるでしょう。 (1A.C)16=(11010.11)2=(11|010.110|)2=(32.6)8 最後は、多分、10進数への変換でしょう。 それは簡単にできます。 (11010.11)2=16+8+0*4+2+0*1+(1/2)+(1/2)^2=(26.75)10 >(12.14)8を2,8,16進数に (12.14)8=1*8^1+2*8^0+1*(1/8)+4*(1/8)^2 8=2^3 で (1/8)=(1/2)3 であるので (12.14)8=1*2^3+2*2^0+1*(1/2)^3+4(1/2)^6 ここで、2*2^0=1*2^1 4(1/2)^6=1*(1/2)^4 従って (12.14)8=1*2^3+2*2^0+1*(1/2)^3+4(1/2)^6=1*2^3+1*2^1+1*(1/2)^3+1*(1/2)^4 =(1010.0011)2 (1010.0011)2=(|1010.0011|)2=(/12/.3)16=(C.3)16 10進数への換算は、2進数が出ているのでそれを元に計算できるし、16進数でC.3ということは、1*16+3*(1/16) であり、これを計算すると、(16.1875)10 なお、途中で計算間違いをしているかも知れません。 検算してください。
少数部分は、分数で考えて、分母が(10^x)n になるようにします。 (0.75)10 = (75/100)10 = (3/4)10 = (11/100)2 = (0.11)2 = (3/4)8 = (6/10)8 = (0.6)8 = (3/4)16 = (C/10)16 = (0.C)16 (1A.C)16 は、サービス問題ですね。 (12.14)8 は、やや複雑ですが、基本的な事がわかってしまえば簡単です。 (0.14)8 = (14/100)8 = (12/64)10 = (3/16)10 = (1875/10000)10 = (0.1875)10 あとは頑張ってください。