C/C++程序设计

浮点数的存储

有下面的代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
     int a;
     float *b = (float *)&a;
     *b = 13.0f;

     printf("%d\n", a);
     printf("%#x\n", a);

     return 0;
}

最后的输出会是多少呢? 答案是:

1095761920
0x41500000

涉及到IEEE754浮点数的存储方式。

这是计组的课上讲的,一些特殊的复杂的规定就不记了,要点是:

  1. 已知十进制浮点数,求其内存中的十六进制表示,假设这个数是13.0
  2. 先转化成二进制,为1101.0
  3. 再规格化,为1.101 * 2 ^ 3
  4. 求指数,对于float,加上127, 3 + 127 = 130
  5. 写出二进制,float的指数位为8位,符号位1位,小数位为23位。

130的二进制为1000 0010,8位。则13.0的二进制表示为:

0 1000 0010 101 00000000000000000000
  1. 写成16进制,每四个一组:
0100 0001 0101 0000 0000 0000 0000 0000

最后的十六进制为:0x41500000

参考了这里 .