У меня есть функция, которая переворачивает биты в байте, но я не понимаю синтаксис. Почему используются 0x0802U и 0x22110U и другие бинарные операции (что это за числа)
unsigned char reverse(unsigned char B)
{
return (unsigned char)(((b * 0x0802U & 0x22110U) | (b * 0x8020U & 0x88440U)) * 0x10101U >> 16);
}