C言語のfloat値のビットを表示する

研究室で浮動小数点数の話題が出たときに気になったので、値のビットを表示するプログラムを書いてみた。

#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だよね?