Assembly 如何将二进制浮点转换为十进制分数?

Assembly 如何将二进制浮点转换为十进制分数?,assembly,binary,floating-point,ieee-754,Assembly,Binary,Floating Point,Ieee 754,我被家庭作业困住了;我需要把二进制浮点数转换成十进制分数。我觉得我理解这个过程,但我没有得到正确的答案。这是我的思考过程 我有二进制浮点:0 000 101 3位指数字段的偏差为3:2^(3-1)-1=3 尾数变为1.101(基数2) 指数位数0减去指数位数3的值为-3,因此尾数的小数点向左移动3位 0.001101 在base-10中,即2^-3+2^-4+2^-6,等于0.203125或13/64 然而,13/64不是正确答案,自动平地机不接受。如果我的答案是错误的,那么我不明白为什么,

我被家庭作业困住了;我需要把二进制浮点数转换成十进制分数。我觉得我理解这个过程,但我没有得到正确的答案。这是我的思考过程

我有二进制浮点:
0 000 101

  • 3位指数字段的偏差为3:
    2^(3-1)-1=3
  • 尾数变为
    1.101
    (基数2)
  • 指数位数0减去指数位数3的值为-3,因此尾数的小数点向左移动3位
    0.001101
  • 在base-10中,即
    2^-3+2^-4+2^-6
    ,等于0.203125或13/64
然而,13/64不是正确答案,自动平地机不接受。如果我的答案是错误的,那么我不明白为什么,我希望有人能给我指出正确的方向


纯粹是运气使然,我猜到了5/32的答案,而且答对了;我不知道为什么会这样。

在IEEE-754浮点格式中,
指数=0
是非规范的,尾数中隐含的前导位是0

维基百科有一篇关于这种格式的详细文章,其中有很多例子。对于binary32 float,公式如下(摘自wiki文章):

(请注意,0.0是非规范的特例,但实际上并不被视为非规范)

无论如何,对于零指数,请注意指数不再是
expbits-bias
,而是更高一个


回到你的例子:你的尾数是0.101二进制,0.625十进制(我把
0b101/8
插入
calc

2^-2*
0.101
(二进制)=2^-2*0.625(十进制)=0.15625=5/32


维基百科上有一篇文章提到(举例)一种8位IEEE格式,以及一些在现实生活中计算机图形硬件上使用的其他小于32位的格式。(例如,24位或16位)。有趣的事实:x86可以加载/存储16位半精度浮点的向量,使用


另请参见此带位复选框的在线转换器:

它说正确答案是什么?另一种看待0.001101对错的方式与1101/2^6或13/64相同。那么你的指数一定是错的?知道正确的答案应该能解决这个问题是吗?纯粹是运气使然,我猜5/32是正确的答案;我不知道为什么会这样也许格式没有隐藏的前导1位?尾数为1.01,值为1.01 x 2^-3,即5/32。我们有两种不同的赋值,一种用于7位浮点,另一种用于8位浮点。我想我应该从7位开始。作业没有提到任何关于不同格式的内容;我对这些东西是全新的,但我知道我们将在本学期晚些时候编写ARM64指令,我不知道这是否更有意义。
(−1)^signbit × 2^(−126)        × 0.significandbits   ; denormal, expbits=0
(−1)^signbit × 2^(expbits−127) × 1.significandbits   ; normal
 Inf  or  NaN (depending on mantissa aka significant); expbits = all 1s