1

符号なしの__int32にfloat表現が格納されています。この質問の答えで指示されているように、バイトシフトを再構築できることを私は知っています。

intをCでfloatに変換します(キャストなし)

シフト、乗算、合計を避け、ビットを再解釈したいだけです。IEEE 754単精度エントリのWikipediaの例を試しましたが、再解釈すると0になります。

これが私のコードです:

unsigned __int32 integer = 0;   
unsigned __int32 mask = 0;
mask = mask + 1 << 30;
mask = mask + 1 << 29;
mask = mask + 1 << 28;
mask = mask + 1 << 27;
mask = mask + 1 << 26;
mask = mask + 1 << 22;
integer = integer ^ mask;
printf("%ld %d\n", integer, sizeof(__int32));
float* decimal = reinterpret_cast<float*>(&integer);
printf("%f", *decimal);
return 0;
4

1 に答える 1

3

おそらくここでの問題は、2 つの異なる型の (非 char) ポインターが同じメモリ位置を指すようにすることで、厳密なエイリアス規則に違反していることです。

あなたの問題に対する最も簡単で簡単な解決策はmemcpy、バイトだけです(整数型と浮動小数点型のサイズが同じであると主張した後):

float decimal = 0.0f;
memcpy(&decimal, &integer, sizeof(integer));
于 2013-03-20T18:57:08.903 に答える