В 64-битном числе Как выполнить XOR старшие 32 бита с младшими 32 битами. Спасибо
(v & 0xffffffff) ^ ((v >> 32) & 0xffffffff)
Просто для удовольствия, вот другое решение.Один из приведенных уже, вероятно, путь.
uint32_t* number32; uint64_t number64 = 0xffff1111ffffffff; uint32_t xorValue; number32 = (uint32_t*)&number64; xorValue = number32[0]^number32[1];
, если вы хотите сохранить результат в младших 32 битах:
(v & 0xffffffff) ^ ((v >> 32))
, если вы хотите сохранить результат в старших 32 битах:
((v & 0xffffffff) ^ ((v >> 32))) << 32
uint32_t hi_low_xor(uint64_t x) { return static_cast<uint32_t>(x) ^ static_cast<uint32_t>(x >> 32); }