プログラミングのテストでなぞなぞを解こうとしています。
免責事項: これは就職試験ですが、答えを求めているわけではありません。これを行う方法の理解を求めているだけです。このテストでは、一連の問題に対する一連の解決策を 2 週間以内に考え出す必要があり、単独で解決策に到達する必要はありません。
だから、問題:
次のようにビットが配置された32ビットの数値があります。
siiiiiii iiiiiiii ifffffff ffffffff
どこ:
- s は符号ビット (1 == 負)
- i は 16 整数ビット
- f は小数部の 15 ビット
割り当ては、32 ビット整数を浮動小数点数にデコードするものを書き込むことです。次の入力が与えられると、次の出力が生成されます。
input output
0x00008000 1.0
0x80008000 -1.0
0x00010000 2.0
0x80014000 -2.5
0x000191eb 3.14
0x00327eb8 100.99
数値の符号ビットまたは整数部分を取得するのに問題はありません。次のような符号ビットを取得します。
boolean signed = ((value & (1 << 31)) != 0);
次のように整数部分と小数部分を取得します。
int wholePart = ((value & 0x0FFFFFFF) >> 15);
int fractionPart = ((value & 0x0000FFFF >> 1));
私が問題を抱えている部分は、最後の 15 ビットの数値を取得して、期待値と一致させることです。3.14 の代わりに、3.4587 などを取得します。
誰かが私が間違っていることについてヒントをくれたら、それを感謝します。何よりも、何時間もいじった後もこれを理解できなかったという事実は、私を一種の狂気に駆り立てます. :-)