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

时间:2016-09-30 06:04:21

标签: javascript floating-point ieee-754

我刚检查了 3 的数字是如何存储的,它的存储方式如下:

0 10000000000 1000000000000000000000000000000000000000000000000000

虽然我预计它会像这样存储:

0 10000000000 0000000000000000000000000000000000000000000000000001

如何在IEEE-754下的尾数中布置位?为什么1在左边而不在右边?

1 个答案:

答案 0 :(得分:2)

注意:以下是正常值。非正规,无穷小或NaN的规则是不同的,但与值3无关。

尾数(a.k.a. significand)存储为1.加一个分数。 1在那里“总是”,所以它不存储。分数存储为最高位0.5 (2^-1),下一位0.25 (2^-2)等等。

3存储为1.5 * 2 1 。未存储1.,因此只存储0.5位,这就是您所看到的。以下所有(低阶)位均为0。指数为0x4001 + 10230x3FF)的偏差,或二进制:100 0000 0000。符号位为0(非负值)。

如何以物理方式存储它取决于系统的endianness。 Little-endian系统首先存储低字节(最后0x00),大端系统首先存储顶部字节(符号位和指数的顶部位,在本例中为顶部{{1} })。

位中的文本表示与此无关。符号位始终是最高位,始终显示在左侧,指数位于该位置以下和位于尾数下方。

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

0x40

让我们重新格式化:

0 10000000000 1000000000000000000000000000000000000000000000000000

或十六进制数字:

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

它以十六进制存储为单个64位值:

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

64位 与字节序无关(就像整数十进制0x4008000000000000 一样,它与字节序无关,它无论你如何储存,它都是12345。但是,如果我们开始 存储 值,则字节的顺序变得很重要。

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

12345

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

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