В C / C ++ лучший способ (на мой взгляд) - использовать объединение. Например, следующая функция использует анонимное объединение для извлечения 32-разрядных младших разрядов из 64-разрядного целого числа.
uint32_t lower_32_bits(uint64_t value) {
union { uint64_t value; struct { uint32_t high, low; }; } converter;
converter.value = value;
return converter.low;
}
Этот трюк объединения можно использовать для всех видов вещей, например, для получения битов значения с плавающей запятой в целое число с одинаковой длиной, например для выполнения побитовых операций и других хаков.