0 000000000000000000000000 0111011
我会怎么做这个问题我迷路了。
您的粗体表明您可能对字段的顺序有些困惑;IEEE 通常对浮点数使用符号、指数、分数的顺序。(顺便说一句,如果没有 NaN 或其他非数字值,这允许使用二进制补码整数排序来对 IEEE 浮点数进行排序。)
那么我们在这里看什么呢?第一位是符号:0。所以我们有一个正数。(如何记住这一点?回到允许使用的整数排序——二进制补码整数中的前导表示它是负数。)
接下来的八位是指数:也是0。这是可能的最低指数值;它通常表示一个偏置 127 或值 -127 的无符号整数。但是,指数值 0 保留用于编码次正规数(小于通常可表示的最小数字);在这种特殊情况下,有效指数是 -126,但不是表示数字 1.fraction * 2^exponent,次正规表示数字 0.fraction * 2^exponent。
最后,我们得到分数,即0000000000000000111011
。所以我们的总数是0.0000000000000000111011b * 2^-126。将其转换为十进制留给读者。
我同意@addaon 之前发布的答案。此外,在某些语言(包括 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,与作为非规范化正数的解释一致,并且与转换网站一致。