1

我有一个存储在无符号 __int32 中的浮点表示。我知道您可以重建数字字节移位,就像这个问题的答案中所指示的那样:

在 C 中将 int 转换为浮点数(无强制转换)

我想避免移位、乘法和求和,而只是重新解释这些位。我尝试了 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

这里的问题很可能是您违反了严格的别名规则,因为两个不同类型的(非字符)指针指向相同的内存位置。

解决问题的最简单、最直接的方法就是memcpy字节(在断言整数和浮点类型的大小相同之后):

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