Gob*_*0st 1 c++ ieee-754 visual-studio-2008
我使用以下示例使用VS2008测试IEEE 754浮动格式:
int main(int argc, char *argv[])
{
float i = 0.15625;
}
Run Code Online (Sandbox Code Playgroud)
我把&i放到VS2008手表上,我看到地址是0x0012FF60,我可以从内存调试窗口看到地址的内容是00 00 20 3e,见下图:
0x0012FF60 00 00 20 3e cc cc cc cc
BTW我有IEEE754浮动格式的基本知识,我知道IEEE 754浮动格式由三个字段组成:符号位,指数和分数.分数是没有最重要位的有效数.
但是我如何从小端00 00 20 3e到0.15625精确计算?
非常感谢
在大端机器上的32位浮点内存布局(请参阅http://en.wikipedia.org/wiki/Single_precision).

一个小端机器(例如x86)简单地交换字节对,'cc'是未使用的内存位,使32位浮点数高达64位值由调试器显示
编辑:记住指数是有符号的(二进制补码),因为0.15625小于1,指数为负数)
value = sign*2 ^ exp*尾数.
0x3e = 0011 1110
0x20 = 0010 0000
由于符号位,我们必须将它们随机移动,因此
指数= 0111 1100 = -3
尾数= 0100 0000 = 1 + 0.25(假设第一个位置之前的那个)
即0.15625 = +1*2 ^( - 3)*1.25