将以下在IEEE浮点(S,分数,指数)中表示的32位二进制数转换为十进制数

时间:2012-12-15 22:47:56

标签: floating-point binary ieee

0 00000000000000000000000 0111011

我怎么会这样做我迷路了。

2 个答案:

答案 0 :(得分:2)

你的粗体表明你可能对字段的顺序感到有点困惑; IEEE通常将顺序sign,exponent,fraction用于浮点数。 (顺便提一下,如果没有NaN或其他非数字值,这允许使用二进制补码整数排序来排序IEEE浮点数。)

那么我们在这看什么呢?第一位是符号:0所以我们有一个正数。 (如何记住这一点?回到允许使用整数排序 - 二进制补码整数中的前导意味着它是负数。)

接下来的8位是指数:也是0.这是可能的最低指数值;它通常表示一个偏向127的无符号整数,或者值-127。但是,指数值0保留用于编码次正规数(小于通常可表示的最小数);在这种特殊情况下,有效指数是-126,而不是表示数字1.fraction * 2 ^指数,一个次正规表示数字0.fraction * 2 ^指数。

最后,我们得到了分数,即0000000000000000111011。所以我们的总数是0.0000000000000000111011b * 2 ^ -126。将此转换为十进制留给读者。

答案 1 :(得分:1)

我同意@addoon以前发布的答案。此外,转换可以在某些语言中轻松完成,包括Java:

public class Test {
   public static void main(String[] unused) {
      int raw = 0b0000000000000000000000000111011;
      float f = Float.intBitsToFloat(raw);
      System.out.println(f);
   }
} 

(你需要版本7才能获得二进制文字,但在早期版本中可以直接做同样的事情)

输出为8.3E-44,与正解非正规数的解释一致,并与转换网站一致。