浮動小数点表現の問題で以下の実行結果を元にfloat型変数 f に与えた実数の実際に格納されているビット列を表示するプログラムを作りたいのですが、
#include<stdio.h>
main()
{
float a;
scanf("%f",&a);
printf("%f",a);
}

この程度までしか作れません。ポインタを使ってアドレスを表示することは分るのですが…。
どなたか教えていただけると助かります。

実行結果
Size of Float : 4 byte
Size of Int : 4 byte
f=0.500000000000000
00111111000000000000000000000000

このQ&Aに関連する最新のQ&A

A 回答 (4件)

単精度浮動小数点数のバイナリー表示するには、


float型の変数を符号なし整数として扱う必要があると思います。
型変換するのではなく、そのまま読みかえるわけです。
C言語には、共用体(union) というのがあります。
まず、これを調べてください。
整数として読めれば、上位ビットから順に0、1を
調べて表示すればよいわけです。
このためには、マスクといテクニックとビットシフトが
有効です。
がんばってください。
    • good
    • 0

環境が不明である以上 float と unsigned の大きさが等しいという仮定は危険ではないでしょうか>#3. 面倒でも


unsigned char i[sizeof(float)];
とすべきだと思います.
もっといえば limits.h を #include して CHAR_BIT を使うべき.
    • good
    • 0

 


 カテ違い。

#include <stdio.h>

union bits{
float f;
unsigned i;
};

int main(void)
{
union bits f_i;
int i;

scanf("%f", &f_i.f);
printf("%f\n", f_i.f);
for(i = 31; i >= 0; -- i) printf("%d", (f_i.i >> i) & 1);
return 0;
}
 
    • good
    • 0

なんとかして f の各バイトの値を得る必要がある, ということはいいでしょうか? そのためには


・unsigned char の配列との union
・unsigned char * へのアドレスのキャスト
のどちらかをすることになります. 得られればシフトとかマスクとかすれば OK.
ただし, 処理系によってはその通りの結果が得られない可能性があるのでそこは気を付けてください.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング