4

私は次のように出力しようとしましたが、混乱しました、

    float f=3.4;
    char *cp;
    cp=(char *)&f;
    printf("%d\n",*cp);

私が計算した正規化された数IEEE 754 stdは、

0 10000000 10110011001100110011001

それが私がcpで今の価値があると仮定した理由です。

10011001

2の補数に変換した後、

01100111

-103 を出力するはずですが、流血/DevC で -102 を取得しました。なぜそのような出力???

4

2 に答える 2

4

これfは、切り上げられているためです。

3.4 = 10110011001100110011001 100110011001...  (repeating 1001)

次のように切り上げます。

3.4 = 10110011001100110011010
                            ^

単精度浮動小数点に格納された場合。

最後の 8 ビットを抽出すると、実際10011010には10011001.

変換10011010->-102の代わりに-103.

于 2012-07-07T19:46:53.647 に答える
2

私はあなたが間違った計算をしたと思います:

Prelude> decodeFloat (3.4 :: Float)
(14260634,-22)
(0.03 secs, 2929112 bytes)
Prelude> Numeric.showHex (fst it) ""
"d9999a"

仮数は で終わり1010ます。

于 2012-07-07T19:46:26.843 に答える