uint32_t ReverseBits(uint32_t num)
{
uint32_t result = 0;
uint8_t counter = sizeof(num) * CHAR_BIT;
while(num)
{
result <<= 1;
result |= (num & 1);
num >>= 1;
--counter;
}
return result << counter;
}