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

Bra*_*van 1 c++ casting bitwise-operators

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

1.58661e-038
3.63242e-038
2.53418e-038
Run Code Online (Sandbox Code Playgroud)

float变量包含值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;
Run Code Online (Sandbox Code Playgroud)

给我

1.75384e-038
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是 - 如何将类型的变量float(以及稍后的a double)拆分成单个字节(允许我修改位),然后重新组装它.

任何帮助将不胜感激.

Dre*_*ann 6

bytes是一个指针.

更改

float f1 = reinterpret_cast<float&>(bytes);
Run Code Online (Sandbox Code Playgroud)

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