Мое предложение: научиться любить std::bitset
. Это часто пригодится, когда мы играем с битами. Рассмотрим этот код:
#include <bitset>
#include <iostream>
int main() {
unsigned long x = 12345678;
std::bitset<32> a{ x} ;
std::bitset<32> b{ x & 0xff };
std::bitset<32> c{ (x >> 8) & 0xff };
std::bitset<32> d{ 0xff };
std::cout << a << '\n' << b << '\n' << c << '\n' << d;
}
Его вывод (комментарии добавлены)
00000000101111000110000101001110 // x
00000000000000000000000001001110 // x & 0xff
00000000000000000000000001100001 // (x>>8) & 0xff
00000000000000000000000011111111 // 0xff
Так что здесь происходит ...
0xff
является целым числом литерал с 8 младшими битами. Побитовое и &
позволяет вам маскировать биты, ie результат имеет те биты, которые установлены в обоих операндах. Оператор сдвига >>
сдвигает биты на указанную величину (в нашем случае 8).
Всего ваш код сначала помещает первые 8 битов, а затем следующие 8 битов в очередь.