10進数をIEEE 754 Float32へ変換する方法|13.25の計算例

この記事の要点

値をすぐに変換・確認したい方へ

IEEE 754変換ツールで符号・指数・仮数を分解できます。

IEEE 754変換ツールを使う

10進数からFloat32へ変換する全体手順

  1. 符号ビットを決めます。
  2. 整数部と小数部を2進数へ変換します。
  3. 1.x × 2ⁿの形へ正規化します。
  4. 指数nにbias 127を加えて指数部を作ります。
  5. 先頭の1を除いた小数部分を23ビットの仮数部にします。
  6. 32ビットを4ビットずつ区切ってHEXへ変換します。

13.25を2進数へ変換する

整数部13は1101、小数部0.25は0.01です。したがって13.25は次の2進数になります。

13.25₁₀ = 1101.01₂

小数部は、0.25×2=0.5、0.5×2=1.0の順に整数部分を並べると.01になります。

正規化して指数を求める

1101.01の小数点を左へ3桁移動し、先頭が1になる形にします。

1101.01₂ = 1.10101₂ × 2³

実際の指数は3です。Float32のbias 127を加えると130になり、2進数では10000010です。

符号・指数・仮数を作る

0正の値
100000103 + 127
10101000000000000000000先頭の1を除く

正規化した1.10101の先頭の1は保存しません。残りの10101の右側を0で埋め、23ビットにします。

32ビット列をHEXへ変換する

0100 0001 0101 0100 0000 0000 0000 00004 1 5 4 0 0 0 0
13.25のFloat32表現

2進数:0 10000010 10101000000000000000000
HEX:41540000

負の数では符号ビットだけ変わるのか

値の絶対値が同じであれば、正規化した指数と仮数は同じで、符号ビットが1になります。たとえば−2.5のFloat32はC0200000です。

有限ビットに収まらない小数

0.1のように2進数で循環する小数は、23ビットの仮数部へ収まるよう丸められます。そのため、保存された値は入力した10進小数と完全には一致しません。

注意

手計算では末尾を単純に切り捨てず、実際には規定の丸め方法が適用されます。正確な最終ビットは変換ツールで確認してください。

よくある質問

13.25のFloat32 HEXは何ですか?

Big Endianで41540000です。ビット列は0 10000010 10101000000000000000000です。

Float32の指数に127を加えるのはなぜですか?

負の指数も符号なしの8ビットで保存できるよう、bias 127を加えた値を指数部へ格納するためです。

仮数部の先頭の1を保存しないのはなぜですか?

正規化数では先頭が必ず1になるため、省略しても復元できます。省略した分だけ有効数字を1ビット増やせます。

小数部を2進数へ変換する方法は?

小数部へ2を掛け、結果の整数部分を上から順に並べます。小数部が0になるか、必要な精度へ達するまで繰り返します。