Floating point 如何将二进制浮点数转换为十进制数

Floating point 如何将二进制浮点数转换为十进制数,floating-point,binary,decimal,Floating Point,Binary,Decimal,我用过那个网站:他们说2.625是0\u 100\u 0101基于指数是4和mantisa是5/16。所以这个数字是(5/16)*2^4,而这绝对不是2.625 所以它应该是怎样的。最重要的“1”没有编码。因此,在转换时,您需要添加该选项 在本例中,数字为“0101”,因此添加“1”将得到“1.0101”。然后指数是4,但需要偏移3,因此实际乘数仅为2^1 这给出了一个“10.101”的结果,实际上是2.625您以错误的方式解释了数据 0是符号,所以数字是正数 100是指数,实际上是1(2^1)

我用过那个网站:他们说
2.625
0\u 100\u 0101
基于指数是
4
和mantisa是
5/16
。所以这个数字是
(5/16)*2^4
,而这绝对不是
2.625


所以它应该是怎样的。

最重要的“1”没有编码。因此,在转换时,您需要添加该选项

在本例中,数字为“0101”,因此添加“1”将得到“1.0101”。然后指数是4,但需要偏移3,因此实际乘数仅为2^1


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

您以错误的方式解释了数据

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

000(数字0和非规范化数字)
001-2
010-1
0110
100 1
1012
1103
111(无穷和非)

p.S.NAN:不是数字(错误代码和其他东西)

0101是你的尾数

这实际上意味着你的数字是1.0101(因为每个数字都必须以“1”开头,所以有一个隐藏位用于额外的精度。“1”实际上并没有被存储)


这将为您提供(1+5/16)*2=2.625

我认为可以安全地假设您理解,或者更确切地说,认为浮点数可以有负指数

但是如果你仔细想想,那到底是怎么发生的呢?这就是“偏见”发挥作用的地方,我认为这是你理解中缺失的一环。在你的链接中,他们提到了计算偏差的以下定律:

2^(k-1)-1

其中k是指数字段中的位数。在你的例子中,k是3位,所以偏差是3。这样,您可以对[-3,4](包括在内)范围内的任何指数进行编码


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

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

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

在恢复第一个尾数时,尾数被更新为1.0101

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

二进制表示为1.0101*2^1


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

更正:指数的符号实际上是通过偏置而不是通过符号位来完成的。因此,111是一个有效的指数(4),而不是(无穷大)。我很确定在这种情况下111是无穷大。然而,问题是000应该是0和非规范化的数字。我看不出你们两个句子之间有什么联系,也看不到第一个句子与我写的任何东西之间有什么矛盾:)你能解释一下10.101怎么就是2.625吗?