IEEE 754の16進数を浮動小数点数へ変換する方法|HEX解析
この記事の要点
- 8桁のHEXを32ビットへ展開し、1・8・23ビットに分割します。
- 指数部を10進数へ直し、bias 127を引いて実際の指数を求めます。
- 符号と仮数を計算式へ代入し、元の浮動小数点数を復元します。
Float32のHEXを解析する手順
- 8桁のHEXを32ビットの2進数へ変換します。
- 先頭1ビット、次の8ビット、残り23ビットへ分けます。
- 指数部からbias 127を引きます。
- 仮数部を
1.fの形へ戻します。 (−1)ˢ × 1.f × 2ⁿで値を計算します。
例1:3F800000を解析する
HEXを2進数へ変換すると、次の32ビットになります。
3F800000 = 001111111000000000000000000000000正
01111111127
00000000000000000000000仮数0
- 符号:
(−1)⁰ = 1 - 実際の指数:
127 − 127 = 0 - 有効数字:
1.0₂
計算結果
1 × 1.0 × 2⁰ = 1.0
例2:C0200000を解析する
C0200000 = 1 10000000 01000000000000000000000- 符号ビット1:負の値
- 指数部128:実際の指数は1
- 仮数部
.01:有効数字は1.01₂ = 1.25
計算結果
−1 × 1.25 × 2¹ = −2.5
指数部がすべて0・すべて1の場合
指数部が0または255の場合は通常の正規化数ではありません。ゼロ、非正規化数、Infinity、NaNとして解釈します。
| 指数 | 仮数 | 結果 |
|---|---|---|
| 0 | 0 | ±0 |
| 0 | 0以外 | 非正規化数 |
| 255 | 0 | ±Infinity |
| 255 | 0以外 | NaN |
エンディアンに注意する
3F800000は数値としてのBig Endian表記です。同じFloat32の1.0でも、Little Endianのメモリや通信データではバイト列が00 00 80 3Fになる場合があります。
よくある原因
HEXが正しいのに値が大きく異なる場合は、バイト順だけでなく、16ビットワード単位の入れ替えも確認してください。
ツールで各フィールドを確認する
手計算では4ビットの写し間違いや指数の引き忘れが起きやすいため、最後にIEEE 754変換ツールへHEXを入力し、符号・指数・仮数を照合してください。
よくある質問
3F800000はFloat32でいくつですか?
1.0です。符号0、指数127、仮数0なので1×1.0×2の0乗になります。
C0200000はFloat32でいくつですか?
−2.5です。符号1、実際の指数1、有効数字1.25として計算します。
HEXは必ず8桁ですか?
Float32は32ビットなので通常8桁、Float64は64ビットなので通常16桁のHEXで表します。
Little EndianのHEXはどう読みますか?
バイト単位の並びを正しい順序へ戻してからIEEE 754のビット構造として解析します。機器によってはワード順も入れ替わるため仕様確認が必要です。