浮点数转换 - 二进制 -> 十进制

Floating point conversion - Binary -> decimal

这是我正在处理的号码

1 01110 001 = ____
1 个符号位,5 个 exp 位,3 个小数位
偏差 = 15

这是我目前的流程,希望你能告诉我哪里遗漏了什么

  1. 将二进制指数转换为十进制
    01110 = 14
  2. 减去偏差
    14 - 15 = -1
  3. 将小数位乘以结果
    0.001 * 2^-1 = 0.0001
  4. 转换为十进制
    .0001 = 1/16

符号位是1所以我的结果是-1/16,但是给出的答案是-9/16。有人介意解释一下分数中多余的 8 是从哪里来的吗?

您的概念似乎是正确的,包括对 excess-N 表示的理解,但您遗漏了一个关键点。

用于对幅度的小数部分进行编码的 3 位是 001,但是在小数位之前有一个隐含的 1.,所以完整的幅度实际上是 1.001 ,可以表示为假分数 1+1/8 => 9/8.

2^(-1)1/(2^1)1/2.

相同

9/8 * 1/2 = 9/16。考虑到符号位,您得出答案 -9/16.

对于规范化浮点表示,Mantissa(小数位)= 1 + f。这有时称为隐式前导 1 表示。这是一个免费获得额外精度的技巧,因为我们总是可以调整指数 E,使重要的 M 在 1<=M < 2 ...

范围内

你几乎是正确的,但必须考虑隐含的 1。如果它是 非规范化的(意味着指数位全为 0),你不添加隐含的 1。

我会这样解决这个问题...

1  01110  001

bias = 2^(k-1) -1 =        14

Exponent = e - bias       

14 - 15 = -1
  1. 取小数位>>001
  2. 添加隐含的 1 ->> 1.001
  3. 按指数移动它,即-1。变成 .1001
  4. 数一数,1(1/2) + 0(1/4) + 0(1/8) + 1(1/16) = 9/16
  5. 负号位变成-9/16

希望对您有所帮助!