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

时间:2015-04-08 15:47:37

标签: c++ casting bitwise-operators

我正在尝试编写一个将一组字节重新解释为float的函数。我查看了一个Stackoverflow question,它引导我尝试reinterpret_cast<>()一个字符数组,然后我开始尝试将一个浮点数拆分为chars然后重新组合它,但这只会给我看似随机的数字而不是比我认为的值应该是,因为每次输出都不同。一些不同的例子是:

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)分成单个字节(允许我修改位),然后重新组合它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

bytes指针

更改

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

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