// Float_Double.c // double型の浮動小数点数のメモリ格納状態 #include #include void change(double, int []); //10進数を2進数に変換 int i; int j; int k; k = 0; int main() { int bit[64]; // ビットパターンを格納 double a; printf("実数を入力して下さい: "); scanf("%lf",&a); change(a, bit); // 10進数から2進数へ変換しbit[]に格納する printf(" [指数部 ][------ 仮数部 ------------------------------------------]\n" ); return 0; } // 10進数から2進数へ変換して出力 void change(double a, int bit[]) { // ビット演算は、整数型か文字型に対して使用しなければならないので、 // 共用体を使って浮動小数点型のデータを文字型(整数型)として参照する union { double d; // 領域(64ビット) unsigned char c[8]; } data; data.d = a; //double型で代入 for(i=7; i >= 0; i--) { // 文字型で1バイトごとに取り出す unsigned char ch = data.c[i]; for(j = 7; j >= 0; j--){ // 1バイト単位で2進数に変換 if( (ch >> j) & 1 ) bit[k] = 1; else bit[k] = 0; // ビットを出力 printf("%d",bit[k]); k++; } printf(" "); // 1バイトごとに区切りを入れる } printf("\n"); // 改行 }