以下是我想要遵循的教程 .
当试图将数字转换回其二进制表示时,我弄错了 . 有人能告诉我我做错了什么吗?
-0.21875
二进制表示:
.00111 = 1.11 * 2^-3
以来..
0.5^3 + 0.5^4 + 0.5^5 = 0.21875
指数为...
-3 + 127 = 124
因此二进制表示应该是:
s eeeeeeee mmmmmmmmmmmmmm
1 01111100 11100000000000
但为什么我会以同样的方式得到正确的答案转换639.6875?
整数值的表示:
1001111111
十进制值的表示:
1011
结合和规范化:
1001111111.1011 = 1.0011111111011 * 2^9
正规化时,我们将基数直接放在第一个右边的右边?偏向127到指数,127 9 = 136:
10001000
二进制表示:
s eeeeeeee mmmmmmmmmmmmmm
0 10001000 10011111111011
1 回答
第一个值
对于标准化的浮点数,前导'1'不会写入位表示 . 例如,对二进制数1.0001101进行编码将得到一个0001101(...)的尾数 .
关于标准化FP数的这一事实在您发布的演示幻灯片中有所涉及 - 即它是名为
(1 + f)
的部分(而不仅仅是f
) .因此,您的二进制表示-0.21875必须具有尾数位
11000000000000000000000
(在右侧填充到23位长) .第二个值
你没有得到正确的答案 . 639.6875的正确表示形式为:
代码检查
我们可以使用Java方便地确认这些值:
更正
我可以看到这一行的意图:
但它应该这样写: