24位二进制到单精度浮点数

时间:2019-03-30 22:19:41

标签: floating-point binary

我有以下24位二进制文​​件:

  

0101 0011 1111 1101 0111 1101

我需要弄清楚:

  

这些24位可以代表一对单精度浮点数(实数)?

教科书示例说,将24位拆分为两个12位二进制数是我应该前进的方向。

我最终会得到0101 0011 11111101 0111 1101

但是,我的问题是,我的教科书仅给出了16位和32位二进制数的实际工作示例。我不确定如何找出指数,尾数和特征。对我来说这都是很新的。

编辑:这是该教科书的摘录,指出我应该实现的目标:

  

例如24位字符串:

     

0011 0110 0011 1001 0011 0101

     

转换为一对单精度浮点(实数)数字0.13672和-0.0004044。

     

在这台不太精确的计算机上,任何介于0.13672和0.1406之间的单精度浮点数(实数)都将具有相同的12位模式。

对于那些发现此问题感到困惑的人:教科书如何将0011 0110 0011 1001 0011 0101转换为0.13672和−0.0004044?

1 个答案:

答案 0 :(得分:1)

将24位值拆分为一对12位字段看起来像是正确的方法。对于两个12位字段,此处使用的浮点格式似乎是从最左边的位开始的:

  • 一个符号位(0表示正,1表示负)

  • 五个指数位,给出一个无符号值,该值有15的偏差(因此我们必须从该字段的无符号值中减去15才能获得实际的指数)

  • 6位有效位数给出一个无符号值

以这种格式表示的浮点数的绝对值将由下式给出:

significand * ( 2 ^ exponent ) / ( 2 ^ 6 )

对于给定的示例,我们有:

0011 0110 0011 =>
  sign bit       = 0, positive
  exponent field = 01101, which is decimal 13, so actual exponent = 13 - 15 = -2
  significand    = 100011, which is decimal 35

  value = positive 35 * ( 2 ^ -2 ) / ( 2 ^ 6 ) = 0.13672

1001 0011 0101 =>
  sign bit       = 1, negative
  exponent field = 00100, which is decimal 4, so actual exponent = 4 - 15 = -11
  significand    = 110101, which is decimal 53

  value = negative 53 * ( 2 ^ -11 ) / ( 2 ^ 6 ) = -0.0004044

您可以通过对有效值加一的方式重复这些计算来确认有关此格式精度的注释。