あなたの習慣について教えてください!!

先日、学校で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と表現しました。

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

少数部分は、分数で考えて、分母が(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

あとは頑張ってください。
    • good
    • 0

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