Вот Ворон слегка недоумевает тому как преподается программирование в ВУЗе (конкретно - в Питере).
Изучают C++, в даный момент по программе пошли битовые операции.

И в нагрузку - домашнее задание, отобразить unsigned int в битовом виде (это вообще легко решается) но в зеркальном отображении. Используя только битовые операции. Вот тут получается загвоздка, потому что в классической интерпретации - это "алгоритмический трюк", который рассматривается в литературе (у Уорена, в главе 7) и использует маски.

Для unsigned int, к примеру:
x = (x & 0x5555) << 1 | (x & 0xAAAA) >> 1;
x = (x & 0x3333) << 2 | (x & 0xCCCC) >> 2;
x = (x & 0x0F0F) << 4 | (x & 0xF0F0) >> 4;
x = (x & 0x00FF) << 8 | (x & 0xFF00) >> 8;

***
Binary : 0000000001110011 = 115
Binary : 1100111000000000 = 52736