跳转至

直接操作内存二进制表示

#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