Приведение битов через std::bit_cast в C++
Побитовая копия через std::bit_cast из <bit> переносит
объект в другой тип того же
размера, если оба типа тривиально
копируемы.
Так получают целое с тем же представлением,
что у числа с плавающей точкой, не
используя union и не нарушая
строгие правила aliasing. Запишем
float, перенесем биты в
std::uint32_t и выведем hex-вид
через поток:
#include <bit>
#include <cstdint>
#include <iostream>
float pi = 3.14f;
std::uint32_t raw = std::bit_cast<std::uint32_t>(pi);
std::cout << std::hex << raw << "\n";
Обратное приведение восстанавливает
исходное число с плавающей точкой.
Запишем константу и вернем float:
#include <bit>
#include <cstdint>
#include <iostream>
std::uint32_t pattern = 0x40490fdb;
float value = std::bit_cast<float>(pattern);
std::cout << value << "\n";
Объявите float one равным
1.0f. Получите std::uint32_t
bits через std::bit_cast
и выведите bits в шестнадцатеричном
виде.