IEEE 754 Float调试 - 从内存小端到实际浮点数

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精确计算?

非常感谢

Mar*_*ett 6

在大端机器上的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