2

我用过那个网站:http ://sandbox.mc.edu/~bennet/cs110/flt/dtof.html他们说这2.6250_100_0101基于指数是4和尾数是5/16。所以数字是(5/16) * 2^4,而这绝对不是2.625

那么应该如何。

4

4 回答 4

5

您正在以错误的方式解释数据。

0 是符号,所以数字是正数 100 是指数,实际上是 1 (2^1)。指数是有符号的,可能的值为:

000(数字 0 和非规范化数字)
001 -2
010 -1
011 0
100 1
101 2
110 3
111(无穷大和 NAN)

PS NAN:不是数字(错误代码和东西)

0101 是你的尾数。

这实际上意味着您的数字是 1.0101(有一个隐藏位以提高精度,因为每个数字都必须以“1”开头。实际上并未存储“1”)。

这给了你 (1+5/16)*2 = 2.625

于 2013-03-10T11:48:40.200 回答
3

最重要的“1”不被编码。因此,您需要在转换时添加它。

在这种情况下,数字是“0101”,因此添加“1”将得到“1.0101”。那么指数是4,但是需要偏移3,所以实际的乘数就是2^1。

这给出了“10.101”的结果,实际上是 2.625

于 2013-03-10T11:46:20.787 回答
1

[扩展 JasonD 的答案]

我认为可以安全地假设您理解,或者理所当然地认为浮点数可以具有负指数。

但如果你仔细想想,这实际上是如何发生的?这就是“偏见”发挥作用的地方,我认为这是你理解中缺失的环节。在您的链接中,他们提到了以下用于计算偏差的定律:

2^(k-1) - 1

其中 k 是指数字段中的位数。在您的示例中,k 为 3 位,因此偏差为 3。通过这种方式,您可以对 [-3,4](含)范围内的任何指数进行编码。

所以现在希望很清楚,当你解码数字时,你必须首先“消除”指数。因此,正如 JasonD 所说,您的 2^4 实际上是 2^1。

于 2013-03-10T12:14:06.437 回答
1

浮点数是 45(以 16 为底),即 01000101(以 2 为底)。

0101 是尾数部分,100 是指数部分...

在恢复领先的尾数时,尾数被更新为 1.0101...

从指数中减去偏差,在 8 位表示的情况下为 3,指数变为 1...

二进制表示为 1.0101 * 2^1...

反规范化我们得到 10.101,它是 2.625 的二进制表示......

于 2013-03-10T12:16:25.127 回答