C言語で浮動小数点数をビットパターンに変換する方法
1.0の64bit浮動小数点数、32bit浮動小数点数、16bit浮動小数点数でのビットパターンを求めます。
a.c
#include <stdio.h> #include <stdint.h> int main() { union A { double d; float f; _Float16 f16; uint64_t i64; }; union A a; a.d = 1.0; printf("64bit 0x%lx\n", a.i64 & 0xFFFFFFFFFFFFFFFF); a.f = 1.0; printf("32bit 0x%lx\n", a.i64 & 0xFFFFFFFF); a.f16 = 1.0; printf("16bit 0x%lx\n", a.i64 & 0xFFFF); }
コンパイルして、実行すると以下になります。
$ clang a.c $ ./a.out 64bit 0x3ff0000000000000 32bit 0x3f800000 16bit 0x3c00