0

私はこの簡単なプログラムを持っています

#include <stdio.h>
int main(void)
{
 unsigned int a = 0x120;
 float b = 1.2;
 printf("%X %X\n", b, a);
 return 0;
}

私は出力が

some-value 120  (some-value will depend on the bit pattern of `float b` )

でもわかる

40000000 3FF33333

なぜめちゃくちゃになる価値があるのaですか?はその%X引数signed intba0x120

4

2 に答える 2

8

printfまず、フォーマット指定子に一致しない引数を渡すことは未定義の動作です。

次に、はに渡されるfloatと に昇格されるため、4 バイトではなく 8 バイトになります。フォーマットで期待される2 つの値として解釈されるバイトは、引数がプッシュされる順序によって異なります。doubleprintfunsignedprintf

于 2012-05-03T18:05:23.120 に答える
2

格納された float のビットを表示する場合は、union を使用します。

 float b = 1.2;
 union {
      float  f;
      int    i;
 } u;
 u.f = b;

 printf ("%x\n", u.i);

結果 (32 ビット x86):

3f99999a
于 2012-05-03T18:11:30.367 に答える