0

たとえば、0 100 1110 sign exponent mantisaこれは に等しい3.75です。16 進数または 8 進数に変換するにはどうすればよいですか? 私は数時間本当に一生懸命探しました。助けてください。

100ここで私を助けてくれ4 1110ません7/8か?(7/8) * 2^43.75

4

2 に答える 2

1

サインは明らかであるべきです。

仮数は、1 + 1/2*最初のビット + 1/4*2 番目のビット + 1/8*3 番目のビットを意味します... 「小数点以下」であることを除いて、基本的にはバイナリカウントです。

Exponent は、仮数に 2^exponent を掛けることを意味します。exponentしかし、それが表す値のビットをどのように取得するのでしょうか? 私はいくつかのグーグルを行いました、そしてどうやらトップビットが設定されていて、残りが0(10、100、1000 ...など)の1場合、あなたは を持って101います。の上。したがって、この場合、指数があります。20110010-11

したがって、この場合、1.875 (仮数) *2^1 (2^指数) を計算して正 (符号) にします。

詳細: http://en.wikipedia.org/wiki/Double-precision_floating-point_format (これは倍精度サイズ用ですが、すべての原則は任意のサイズの浮動小数点に「適用」する必要があります)

編集:指数についてのより良い説明があります。

まず、IEEE 浮動小数点では、指数の最小値と最大値に特別な意味があります。すべてのゼロは「これはゼロまたは非正規数であること」を意味し、すべての 1 は「これは無限大または NaN であること」を意味します。したがって、通常の指数を表すためだけに 3 ビットの指数 ( 000to ) がありますが、これは 6 つの値しかありません。111001110

ここで、「指数」バイアスと呼ばれるものを使用して、この 1 ~ 6 の範囲を負の値と正の値に変換します。特に、-2 ~ 3 の範囲が必要です (最大の正の指数 > 最大の値の大きさ)。負の指数なので、 1/ を実行してもオーバーフローを起こすことはできませんsmallest normalized number. ただし、 1/denormalized numberを生成することはできInfinityます.)

指数の値を取得することでこれを取得します。特殊なケースでない場合は、バイナリ値から 3 を減算し、これを指数値として取得します。

0 100 1110したがって

0-> 正符号

100-> バイナリ値 4、減算 3、指数 1

1110-> 1 + 7/8

(1+7/8)*2^1 = 3.75

于 2013-02-10T09:18:06.810 に答える
1

整数であるかのように、ビットを変換するだけです。浮動小数点数を扱っているという事実を無視してください。

01001110isとis4Eであるため、16 進数に変換されます。(4 つにグループ化する方法に注意してください。)010041110E

8 進数も同様で、 is 、 is 、isで116あるため、 になります。(最初のグループを除いて、どのように 3 にグループ化するかに注目してください。)01100111106

于 2013-02-10T09:22:45.607 に答える