title: Defining (1 << 31) or using 0x80000000? Result is different
body: <pre><code>#define SCALE (1 &lt;&lt; 31)
  
  #define fix_Q31_80(x) ( (int) ( (float)(x)*(float)0x80000000 ) )
  #define fix_Q31_SC(x) ( (int) ( (float)(x)*(float)SCALE      ) )
  
  int main()
  {
      int fix_80 = fix_Q31_80(0.5f);
      int fix_sc = fix_Q31_SC(0.5f);
  }
  </code></pre>
  
  <p>Why are the values <code>fix_80</code> and <code>fix_sc</code> different? </p>
  
  <pre><code>fix_80 == Hex:0x40000000
  fix_sc == Hex:0xc0000000
  </code></pre>