プロが教えるわが家の防犯対策術!

10進数の-7.77を8進数に変換する際、
整数部分の-7を変換したい8で割り、小数部分を8で乗算し、循環するか整数になるか、或いは8bitまで計算する、という方法で答えを導き出そうとしたのですが、
変換ツールなどを用いて答えを見てみると全く違うものでした。

整数部分の計算は、
-7/8
小数部分の計算は、
0.77*8=6.16
0.16*8=1.28
0.28*8=2.24
0.24*8=1.92
0.92*8=7.36
0.36*8=2.88
0.88*8=7.04
0.04*8=0.32

2進数の場合は、ビットの反転後、最終ビットに1を加えることで答えが導き出せたのですが、この計算式の場合は、いったいどうすると正しく計算できるのでしょうか。

A 回答 (2件)

前にも回答したよな。



ツールに誤差があるだけ。
質問が内容の方が正解。
7.77(10進)=7.61217270・・・(8進)
    • good
    • 1

前にも同じような「n進数」「補数」の質問をされていませんか? なんか、全く理解できていないような。



10進数の A.BC とは
 A*10^0 + B*10^(-1) + C*10^(-2)
ということです。

同様に、8進数の D.EF とは
 D*7^0 + E*7^(-1) + F*7^(-2)
ということです。

基本は、こういった式で変換します。

マイナスをどのように表すかは定義次第ですが、「-7.77」を8進数で「-7.XYZ」と表わせば「補数」などを考える必要はありません。
単に、10進数の 7.77 を8進数で表して、符号のマイナスを付ければよいのです。

10進数の 7.77 を8進数で表せば、定義通り8進数「7.ABCDEF」に変換するには(この桁数で打ち切るとして)

(1) A*8^(-1) ≒ A*0.125 ≦ 0.77
となる最大の整数Aは、A=6
このとき
 6*8^(-1) = 0.75
残るは
 0.77 - 0.75 = 0.02

(2) B*8^(-2) = B*0.015625 ≦ 0.02
となる最大の整数Bは、B=1
このとき
 1*8^(-2) = 0.015625
残るは
 0.02 - 0.015625 = 0.004375

(3) C*8^(-3) = C*0.001953125 ≦ 0.004375
となる最大の整数Cは、C=2
このとき
 2*8^(-3) = 0.00390625
残るは
 0.004375 - 0.00390625 = 0.00046875

(4) D*8^(-4) = D*0.00024414 ≦ 0.00046875
となる最大の整数Dは、D=1
このとき
 1*8^(-4) = 0.00024414
残るは
 0.00046875 - 0.00024414 = 0.000224609

(5) E*8^(-5) ≒ E *0.000030517 ≦ 0.000224609
となる最大の整数Eは、E=7
このとき
 7*8^(-5) = 0.000213623
残るは
 0.000224609 - 0.000213623 = 0.000010985

(6) F*8^(-6) = F *0.0000003814 ≦ 0.000010985
となる最大の整数Fは、F=2 だが、最も近そうなのは F=3
このとき
 3*8^(-6) = 0.000011444
残るは
 0.000010985 - 0.000011444 = -0.000000459

このぐらい残差が小さくなればよいでしょう。

ということで、8進数は
「7.612173」

検算として、これを10進数に変換すると
 7.770000458
になりました。

よって
 10進数の -7.77
  ↓
 8進数の -7.612173

桁数が多いので、計算違いがあったらご容赦を。
    • good
    • 0

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