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