title: How `(1U << 1) | (1U << 5)` is different from `0x22`?
body: <p>Would someone please explain me how having the same value <code>VAL1</code> and <code>VAL2</code> behave differently?
  For the first <code>if</code> statement <code>VAL1</code> is equal to zero?
  Thanks!</p>
  <pre><code>#include &lt;stdio.h&gt;
  
  #define VAL1 (1U &lt;&lt; 1) | (1U &lt;&lt; 5)
  #define VAL2 0x22
  
  int main()
  {
      printf(&quot;VAL1: %d\r\n&quot;, VAL1);
      printf(&quot;VAL2: %d\r\n&quot;, VAL2);
  
      if (VAL1 == 0)
      {
          printf(&quot;TRUE 1\r\n&quot;);
      }
  
      if (VAL2 == 0)
      {
          printf(&quot;TRUE 2\r\n&quot;);
      }
  
      if (VAL1 == VAL2)
      {
          printf(&quot;TRUE 3\r\n&quot;);
      }
  }
  </code></pre>
  <p>Output:</p>
  <pre><code>VAL1: 34
  VAL2: 34
  TRUE 1
  TRUE 3
  </code></pre>