• 締切済み

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と表現しました。

みんなの回答

  • starflora
  • ベストアンサー率61% (647/1050)
回答No.2

    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     なお、途中で計算間違いをしているかも知れません。   検算してください。  

noname#30727
noname#30727
回答No.1

少数部分は、分数で考えて、分母が(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 あとは頑張ってください。

関連するQ&A