0 0000000000000000000000 0111011
どうすればこの問題を解決できますか?
太字は、フィールドの順序について少し混乱している可能性があることを示しています。IEEEは通常、浮動小数点数に次数記号、指数、分数を使用します。(ちなみに、これにより、NaNまたはその他の非数値がない場合、2の補数整数ソートを使用してIEEE浮動小数点数をソートできます。)
では、ここで何を見ているのでしょうか。最初のビットは符号0です。したがって、正の数があります。(これを覚える方法は?使用が許可されている整数の並べ替えに戻ります。2の補数の整数の先頭は負であることを意味します。)
次の8ビットは指数です。これも0です。これは可能な限り低い指数値です。これは通常、127でバイアスされた符号なし整数、または値-127を表します。ただし、指数値0は、非正規化数(通常は表現可能な最小値よりも小さい数)をエンコードするために予約されています。この特殊なケースでは、実効指数は-126ですが、数値1.fraction * 2 ^ exponentを表すのではなく、subnormalは数値0.fraction * 2^exponentを表します。
最後に、分数があります。これは0000000000000000111011
です。したがって、総数は0.0000000000000000111011b * 2^-126です。これを10進数に変換することは、読者に任されています。
@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 で、正の非正規化数としての解釈と、変換 Web サイトと一致しています。