整数到浮点数的转换

3490593 这个整型数为例,如果将其转化为单精度浮点数,它在计算机中是以怎样的格式进行存储的?

一个单精度浮点数在计算机中占用 4 个字节, 32 位。

根据 IEEE 754 标准,一个浮点数 V 在计算机中是以如下格式存储的: $$V=(-1)^{s}\times M\times2^{E}$$ 其中,对于单精度浮点数来说(仅位数不同):

  • s 为符号位,由最高位表示,占用 1 位。
  • M 为尾数,占用 23 位。
  • E 为阶码。

首先我们将 3490593 转换为二进制表示:

1
110101000110001000001

一共有 21 位。

由于其并不接近于 0,因此用规格化(Normorlized)表示法,具体表示为 1.10101000110001000001 × 2^21

IEEE 754 标准中尾数 M 的值规定了一个隐藏的开头的 1,因此上述表示中的小数点之后的那些二进制数 10101000110001000001(共 20 位),就是 M 的实际大小。不过由于 M 的位数规定 23 位,所以我们我们需要在其后补充 3 个 0 。因此最后的 M 的值为 10101000110001000001000

由 2^21 可以得出,阶码 E 为 21 位,加上 127 的偏置之后就成了 148,其二进制表示为 10010100。偏置是为了更好地表示负数。

这样一来,3490593 这个数最终在内存中的存储即为: 0 10010100 10101000110001000001000 (s E M,空格分隔不同的部分)。

这个数 8 位一组用 16 进制表示为 4A 56 45 04

使用 Hugo 构建
主题 StackJimmy 设计