How Floats Are Represented In Ram

许久之前写了一篇为什么int和float字节数相同但表示的范围却不同

(近日读来,发现读得不是很好,有些地方位置如前后互换再易理解
不过既已完成就那它保持原样罢,不好也不坏 - -)

文章里提到了现代计算机差不多都是基于 IEEE 754 标准来存储浮点数 并且按理论预测出 13.625 在内存的bits是 0 10000010 10110100000000000000000
0.10 01111011 10011001100110011001101

前几天想到了一个方法应该可以验证一下事实就是这样的
今天试了一下,果然没错,至少我用的这台Macbook是这样的

验证如下:

#include <stdio.h>

int main()
{
    float a = 13.625, b = 0.1;
    int *pa = (int *)&a;
    int *pb = (int *)&b;
    printf("%d\n%d\n", *pa, *pb);
}

输出为:

1096417280
1036831949

然后打开Python将这两个整数转换为二进制

In [1]: '{0:032b}'.format(1096417280)
Out[1]: '01000001010110100000000000000000'

In [2]: '{0:032b}'.format(1036831949)
Out[2]: '00111101110011001100110011001101'

Q.E.D.