浮点数转换 - 二进制 -> 十进制
Floating point conversion - Binary -> decimal
这是我正在处理的号码
1 01110 001 = ____
1 个符号位,5 个 exp 位,3 个小数位
偏差 = 15
这是我目前的流程,希望你能告诉我哪里遗漏了什么
- 将二进制指数转换为十进制
01110 = 14
- 减去偏差
14 - 15 = -1
- 将小数位乘以结果
0.001 * 2^-1 = 0.0001
- 转换为十进制
.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
- 取小数位>>001
- 添加隐含的 1 ->> 1.001
- 按指数移动它,即-1。变成 .1001
- 数一数,1(1/2) + 0(1/4) + 0(1/8) + 1(1/16) = 9/16
- 负号位变成-9/16
希望对您有所帮助!
这是我正在处理的号码
1 01110 001 = ____
1 个符号位,5 个 exp 位,3 个小数位
偏差 = 15
这是我目前的流程,希望你能告诉我哪里遗漏了什么
- 将二进制指数转换为十进制
01110 = 14
- 减去偏差
14 - 15 = -1
- 将小数位乘以结果
0.001 * 2^-1 = 0.0001
- 转换为十进制
.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
- 取小数位>>001
- 添加隐含的 1 ->> 1.001
- 按指数移动它,即-1。变成 .1001
- 数一数,1(1/2) + 0(1/4) + 0(1/8) + 1(1/16) = 9/16
- 负号位变成-9/16
希望对您有所帮助!