title: reverse bits in byte ansi C
body: <p>I have a function that reverse the bits in a byte but i don't understand the syntax. Why is used 0x0802U &amp; 0x22110U and other binary operations(what are this numbers) </p>
  
  <pre><code>unsigned char reverse(unsigned char B)
  {
  return (unsigned char)(((b * 0x0802U &amp; 0x22110U) | (b * 0x8020U &amp; 0x88440U)) * 0x10101U &gt;&gt; 16);
  }
  </code></pre>