我刚检查了 3 的数字是如何存储的,它的存储方式如下:
0 10000000000 1000000000000000000000000000000000000000000000000000
虽然我预计它会像这样存储:
0 10000000000 0000000000000000000000000000000000000000000000000001
如何在IEEE-754下的尾数中布置位?为什么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
。指数为0x400
,1
+ 1023
(0x3FF
)的偏差,或二进制: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