【问题标题】:How can I convert 32-bit binary number to floating point number?如何将 32 位二进制数转换为浮点数?
【发布时间】:2015-09-21 22:31:52
【问题描述】:

我有这个 32 位二进制数 (00111111010000000000000000000000),我想知道如何将其转换为浮点数。

不使用编程或转换器,如何手动将这个 32 位二进制数转换为浮点数?

谢谢,

【问题讨论】:

  • 维基百科有一个fairly clear 描述如何分解价值。
  • 二进制模式是一个整数(不是浮点数),您想知道该数字的浮点版本是什么样的吗?或者那个二进制模式是一个浮点数,你想知道十进制 123.45678 的样子吗?

标签: floating-point binary


【解决方案1】:

假设您正在寻找单个浮点数,格式如下:

第一个数字是符号,接下来的 8 是指数,最后,最后 23 是有效数。

为您的号码(00111111010000000000000000000000)

符号:0 是 +
指数:01111110 为 -1 (126-127)
有效数字:10000000000000000000000 是 1.5(“不可见”的第一位给你 1,然后第二位(只有一组)是 0.5,下一位是 0.25,然后是 0.125,依此类推)

然后您可以这样计算值:

符号 * 2^exp * 有效数

1 * 2^-1 * 1.5
1 * 0.5 * 1.5
0.75

你的浮点数等于0.75。

【讨论】:

    【解决方案2】:

    如果您在 wikipedia 和其他地方进行一些查看,您将了解到浮点标准(有不同的标准,IEEE754 是最广为人知的,因为它用于台式机等(dsp 将有他们的有时自己计算速度更快))将“标准化”数字。浮点数是关于小数点的位置,非浮点整数在数字右侧有一个隐含的小数点

    00111111010000000000000000000000. <--- here
    

    除了要归一化的全零之外,假设我们使用的格式希望数字是二进制的 1.xxxx,所以我们需要移动小数点

    001.11111010000000000000000000000
    

    小数位被移到了最重要的位之后(因此小数点左侧只有一个 1)。

    如果你记得高中数学中的 123 可以写成 1.23 * 10^2(10 的 2 次方)。 123 也是 123 * 10^0。在以 10 为底的数字中,小数点左移的每一位都会将 10 的幂增加一。右边的每个位置都会减少。以 2 为底的二进制没有什么不同,小数点向左移动的每一位都会增加 2 的幂(二进制是以 2 为底的)每向右移动一个位置,就会减少 2 的幂。

    所以准确地说,我们现在的数字是

    1.1111101 * 2^30
    

    现在浮点格式的细节开始发挥作用。因为假设小数点左边的 1(除了确切的数字零和其他一些例外)存在,它有时不在该浮点数的最终二进制表示中,这是浪费空间当我们可以为尾数多放一点时,我们知道总是放一点。尾数通常是二进制中所见即所得的,指数是让你摸不着头脑的那个,尤其是 IEEE754。例如,数字的二进制格式中的 128 的指数可能表示 2 的 0 次幂,而 129 可能是 2 的 1 次幂,依此类推。这可能看起来很奇怪,但对于其中一些格式来说,它只不过是一个二进制补码字段,而另一些则有其他方式来做事。单、双、扩展的指数具有不同的位数,您需要弄清楚您添加到实际指数(在本例中为 30)的内​​容,以获得浮点数的指数字段中的位模式。

    另一个例子

    0000000000000000000000000000000000000101
    

    1.01 * 2^2
    

    如果您从 32 位整数(不是浮点数)开始并希望以 32 位浮点数结束,您显然无法保留该数字的所有细节,因为浮点数需要一个符号位和一个指数和尾数一样,尾数小于 32 位,所以你扔掉了最低有效位

    1000000000000000000000000000001  
    

    会在某个时候被砍掉:

    1.000000000000000 * 2^something
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多