研究室で浮動小数点数の話題が出たときに気になったので、値のビットを表示するプログラムを書いてみた。
#include <stdio.h> #include <stdlib.h> union IntAndFloat { int ival; float fval; }; int main (int argc, char *argv[]) { int i = 0; union IntAndFloat target; target.fval = atof(argv[1]); printf("target = %f\n", target.fval); for (i = 0; i < 32; i++) { if ( (target.ival & 0x80000000) == 0x80000000) { printf("1"); } else { printf("0"); } target.ival = target.ival << 1; } printf("\n"); return 0; }
32bitのfloat専用*1。floatにはビット演算が使えないので困ったのだけど、先輩のHさんに共用体使えば良いよとアドバイスをもらった。float値を入れたメモリをintの値として利用というか、共用している。
実行結果は、次のようになる。
$ ./print_float 3 target = 3.000000 01000000010000000000000000000000
あとは、浮動小数点数 - Wikipediaとにらめっこして浮動小数点数と戯れるなりなんなり。
*1:たいていはfloatって32bitだよね?