C++-对浮点值中的位进行操作

C++ - Operating on the bits in a floating point value

本文关键字:操作 C++-      更新时间:2023-10-16

我正试图编写一个函数,将一组字节重新解释为float。我看过一个Stackoverflow问题,这个问题让我在一个字符数组上尝试reinterpret_cast<>(),我开始尝试将浮点值拆分为字符,然后再次重新组合,但这只会给我带来看似随机的数字,而不是我认为的值,因为每次的输出都不一样。几个不同的例子是:

1.58661e-038
3.63242e-038
2.53418e-038

浮点变量应该包含值5.2。

编译代码:

float f = 5.2;
unsigned char* bytes = reinterpret_cast<unsigned char*>(&f);
float f1 = reinterpret_cast<float&>(bytes);
std::cout << f1 << std::endl;

给了我

1.75384e-038

当然,每次运行程序时都会有一个不同的数字。然而,有趣的是,如果我把代码放在一个循环中,并在一次运行中执行几次,输出就会保持一致。这让我认为它可能是一个内存位置,但如果是这样,我不确定如何访问变量的实际值——解引用运算符不起作用,因为它不是指针。

因此,我的问题是——我如何将类型为float的变量(以及后来的double)拆分为单独的字节(允许我修改比特),然后重新组装它

如有任何帮助,我们将不胜感激。

bytes指针

更改

float f1 = reinterpret_cast<float&>(bytes);

float f1 = *reinterpret_cast<float*>(bytes);
// Cast to a different pointer... ^
//         ^ ...and dereference that pointer.