title: Multiplication of 32 bits numbers in C
body: <p>Why the below code produces this error?</p>
  
  <pre><code>error: left shift count &gt;= width of type [-Werror]
  </code></pre>
  
  <p>The code:</p>
  
  <pre><code>int32_t a,b;
  int64_t apo;
  a = 2673;
  b = 19;
  apo = BIG_MULL(a,b);
  printf("\n %ld \n", apo );
  </code></pre>
  
  <p>The macros found <a href="https://stackoverflow.com/questions/2661162/doing-64-bit-manipulation-using-32-bit-data-in-fixed-point-arithmetic-using-c">here</a>:</p>
  
  <pre><code>#define WORD_MASK ((1&lt;&lt;16) - 1)
  #define LOW_WORD(x)  (x &amp; WORD_MASK)
  #define HIGH_WORD(x) ((x &amp; (WORD_MASK&lt;&lt;16)) &gt;&gt; 16)
  #define BIG_MULL(a, b) \
  ((LOW_WORD(a)  * LOW_WORD(b))  &lt;&lt;  0) + \
  ((LOW_WORD(a)  * HIGH_WORD(b)) &lt;&lt; 16) + \
  ((HIGH_WORD(a) * LOW_WORD(b))  &lt;&lt; 16) + \
  ((HIGH_WORD(a) * HIGH_WORD(b)) &lt;&lt; 32)
  </code></pre>
  
  <p>I am trying to multiply to signed values of 32 bit. The target machine has no support of 64 bit math. </p>