浮点尾数是否从右到左存储位

Does floating point mantissa store bits right to left

我刚刚检查了数字 3 的存储方式,它是这样存储的:

0 10000000000 1000000000000000000000000000000000000000000000000000

而我希望它像这样存储:

0 10000000000 0000000000000000000000000000000000000000000000000001

在 IEEE-754 下,尾数中的位是如何排列的?为什么1在左边而不是右边?

注:以下为正常值。非正规数、无穷大或 NaN 的规则不同,但与值 3.

无关

尾数(a.k.a.有效数)存储为1.加一个分数。 1 在 "always" 那里,所以它没有被存储。分数存储为最高位 0.5 (2^-1)、下一位 0.25 (2^-2)

3 存储为 1.5 * 211. 没有存储,所以只存储了 0.5 位,这就是你看到的。所有后续(低位)位都是 0。指数为 0x400,即 1 + 1023 的偏差(0x3FF),或二进制:100 0000 0000。符号位是 0(对于非负数)。

这是如何物理存储的,取决于您系统的endianness。小端系统首先存储低字节(最后一个 0x00),大端系统首先存储最高字节(符号位和指数的最高位,在这种情况下,最高 0x40).

以位为单位的文本表示与此无关。符号位始终是最高位,始终显示在左侧,指数位在其下方,尾数下方。

让我们看一下文本表示中的位:

0 10000000000 1000000000000000000000000000000000000000000000000000

让我们重新格式化它们:

0100 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

或十六进制数字:

   4    0    0    8    0    0    0    0    0    0    0    0    0    0    0    0  

这被存储为一个 64 位值,十六进制:

0x4008000000000000

64 位 value 与字节顺序无关(就像整数 value 十进制12345 与字节顺序无关,无论您如何存储它,它都是并且仍然是数字 12345。但是如果我们开始存储值,字节的顺序就变得很重要了。

在big-endian中,这存储为以下8个连续字节:

0x40 0x08 0x00 0x00 0x00 0x00 0x00 0x00 

在little-endian中,这存储为以下8个连续字节:

0x00 0x00 0x00 0x00 0x00 0x00 0x08 0x40