• ベストアンサー

p進法

p進法⇒10進法 10進法⇒p進法 のやり方を教えて(公式)を教えてください。 a0pn+a1pn-1+a2pn-2+・・・+an-1p+an  (各akは、0≦ak<p なる整数) 正確には、一応知っているのですが、うまくこの公式を使えません、教えてください。 PS タグがないのでものすごくわかりずらいですね・・・

質問者が選んだベストアンサー

  • ベストアンサー
noname#14584
noname#14584
回答No.3

p進数の場合、rを整数として、 a{-r}p^(-r)+・・・+a{-1}p^(-1)+a{0}p^0+a{1}p^1+・・・ という風に書くことになります。({}は添え字、a{i}は全てO≦a{i}≦p-1) すると、0.625を2進法で表す場合、明らかに1より小さいですから、上式のa{0}より先は必要ないことになります。あとはどんどんp^i(i=-1,-2,・・・)で割って商と余りを立てていくことで出来ます。(このような場合、商と余りと言った言い方はしないのでしょうが、あえてそうさせていただきます) さて、0.625=5/8でやると、 5/8÷1/2=1 余り1/8 1/8÷1/4=0 余り1/8 1/8÷1/8=1 余り0 ということで、表記をすると、 0.101ということになるでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • elttac
  • ベストアンサー率70% (592/839)
回答No.2

 a の i 桁めを a[i],p の n 乗を p^n と書くことにします。p 進法表記で k 桁で表される数 x は, x = a[k - 1]・p^(k - 1) + a[k - 2]・p^(k - 2) + …… + a[0]・p^0 となります(表記を少し変えました)。  さて,ご質問にお答えしましょう。p 進法から 10 進法にする場合は,a[i] と p がわかっていますから,これを上の式の右辺に代入すれば解決です。  たとえば,2 進数の 100101 を 10 進表記に直します。 1・2^5 + 0・2^4 + 0・2^3 + 1・2^2 + 0・2^1 + 1・2^0 = 32 + 4 + 1 = 37 と,10 進表記の 37 が得られます。  続いて,10 進表記から p 進表記に変換する場合です。 この手順は,端的には,「10 進表記のもとの数を,次々に p で割っていき,そのあまりを下の桁から順に並べる」ということになります。  というのは,たとえば,a[0] は, x = p(a[k - 1]・p^(k - 2) + a[k - 2]・p^(k - 3) + …… + a[1]・p^0) + a[0] で,x を p で割ったあまりだからです。こうして求められた a[0] を x から引いて,さらに p で割ると, x - a[0] = p^2・(a[k - 1]・p^(k - 3) + a[k - 2]・p^(k - 4) + …… + a[2]・p^0) + a[1] となって,あまりが a[1] となることがわかります。このあと,商が 0 になるまで続ければ,a[k - 1] から a[0] までが求まります。例として,先ほどの 10 進表記の 37 を 2 進表記に変換します。 37 ÷ 2 = 18 あまり 1 18 ÷ 2 = 9(あまり 0) 9 ÷ 2 = 4 あまり 1 4 ÷ 2 = 2(あまり 0) 2 ÷ 2 = 1(あまり 0) 1 ÷ 2 = 0 あまり 1 これを上から,下の桁から並べると, 100101 と,確かに 2 進で表記した 10 進数の 37 が得られます。  以上,参考になりましたでしょうか。

benefactor_geniu
質問者

補足

返信ありがとうございました。 わかりました。 でも、少数ができません。 たとえば、0.625を2進法へ

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

p進法⇒10進法 abcの時 a*p^2+b*p^1+c*p^0(=X) 10進法⇒p進法 X mod p=c X←[X/p] 以下繰りかえし

すると、全ての回答が全文表示されます。

関連するQ&A