-1

2 進数を浮動小数点数で表現する必要があります。私は 16 進数を FFFF として持っています。この 16 進数を 2 進数に変換すると、対応する 2 進数が 1111111111111111 として得られます。Intel プロセッサで使用されるストレージ形式は 32 ビットで、符号は 1 ビット、指数は 8 ビットを意味します。 、仮数部は 23 ビットです。私はいくつかのアイデアを持っていますが、かなり混乱しています。この 2 進数に対応する float 値を教えてくれる人はいますか??

4

2 に答える 2

4

32個

試してみてください:

#include <stdio.h>

int main() {
  union {
    unsigned i;
    float f;
  } u;
  u.i = 0xffffffff;
  printf("%f\n", u.f);
  return 0;
}

印刷し-nanます。この実験は、質問が述べているように、実際には望んでい0xffffffffないことを前提としています。0xffff

http://en.wikipedia.org/wiki/Single_precisionを見ると、指数0xFFとゼロ以外の仮数が NaN として扱われることがわかります。

16個

あなたの質問が書いているように、あなたが本当に後0xFFFFだけなら、コードは を出力しますが、 を に0.000000変更すると. これは、integer と float の両方が同じエンディアンを使用するためです。つまり、bit pattern に対応する float について話しているのです。%f%g9.18341e-410x0000ffff

ゼロ符号 (つまり、正)、ゼロ指数、ゼロ以外の仮数があることがわかります。同じウィキペディアの記事によると、これは非正規数を表しています。したがって、これは実際には 0xffff ∙ 2 −149 = 65535 ∙ 2 −149です。

于 2012-12-02T19:47:58.780 に答える
3

IEEE-754 32ビットフロート0xFFFFFFFF(つまり32ビットフロート)を想定すると、次のようになります。

最初は記号なので、負のフロートです。次に指数が来ます。これは最大値であるため、「特別な」指数です。

仮数はゼロではないため、結果はになりNaNます。

出典:ウィキペディア

16個だけが必要な場合は、次のようにします。

残りのビットがゼロで、リトルエンディアンを使用していると仮定すると、`0xFFFF0000`になります。これは、仮数がゼロになるにはまだ十分ではないため、結果は依然として`NaN`です。実際、最後の16ビットにどの値を選択しても、結果は常に`NaN`になります。

どうやら、これはMvGによって示されているようには当てはまりません。

残りのビットがゼロであると仮定すると、入力は0x0000FFFFです。最初のビットは符号で、これはゼロです。したがって、正のフロートがあります。
次に、指数に8ビットがあります。それらはすべてゼロなので、(分数に応じて)ゼロまたは非正規化数のいずれかになります。
分数がすべてゼロではないため、この浮動小数点数は非正規化数です。
この時点で、9ビットをチェックしたので、まだ7つの余分なゼロがあります。
分数は7つのゼロとそれに続く16のゼロで構成されているため、仮数は(2進数で)0.00000001111111111111111です。これに掛けると2e-126、答えが得られます。
結果は、明らかに、9.18341e-41です。

于 2012-12-02T19:48:53.707 に答える