直接操作内存二进制表示
#include <cstdint>
#include <cstdio>
int main() {
double x = 100;
const auto orig_x = x;
auto x_as_ui = (uint64_t*)(&x);
*x_as_ui |= 0x8000000000000000;
printf("orig_x:%0.2f x:%0.2f &x:%p &x_as_ui:%p\n", orig_x, x, &x, x_as_ui);
}
union FloatInt {
float f;
uint32_t i;
};
FloatInt x;
x.f = 2.0f; // 二进制表示: 0x40000000
x.i |= 0x80000000; // 设置符号位 → 0xC0000000
std::cout << x.f; // 输出: -2.0
// C++17 安全替代方案 (内存优化场景)
std::variant<int, float, std::array<char, 16>> safePacket;
// C++20 安全位操作 (类型转换场景)
float f = 2.0f;
uint32_t i = std::bit_cast<uint32_t>(f);
i |= 0x80000000;
float result = std::bit_cast<float>(i); // 安全获得 -2.0