我试图输出以下内容但感到困惑,
float f=3.4;
char *cp;
cp=(char *)&f;
printf("%d\n",*cp);
归一化数我已经计算出IEEE 754标准是
0 10000000 10110011001100110011001
这就是为什么我假设cp现在值为,
10011001
转换为2的补码后,
01100111
它应输出-103,但在我的流血/ DevC中得到-102。 为什么这样输出???
答案 0 :(得分:4)
那是因为f
正在被围捕:
3.4 = 10110011001100110011001 100110011001... (repeating 1001)
四舍五入到:
3.4 = 10110011001100110011010
^
存储到单精度浮点时。
现在,当您提取最后8位时,实际上是10011010
而不是10011001
。
转换10011010
- > -102
代替-103
。
答案 1 :(得分:2)
我认为你算错了:
Prelude> decodeFloat (3.4 :: Float)
(14260634,-22)
(0.03 secs, 2929112 bytes)
Prelude> Numeric.showHex (fst it) ""
"d9999a"
尾数以1010
结尾。