浮点尾数是否从右到左存储位
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 * 21。 1.
没有存储,所以只存储了 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
我刚刚检查了数字 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 * 21。 1.
没有存储,所以只存储了 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