title: Are literal suffixes needed in standard C?
body: <p>There is a question already answering the particular case of variable declaration, but what about other literal constant uses?</p>
  
  <p>For example:</p>
  
  <pre><code>uint64_t a;
  ...
  int32_t b = a / 1000000000;
  </code></pre>
  
  <p>Is last piece of code equivalent to next one in any standard C compiler?</p>
  
  <pre><code>uint64_t a;
  ...
  int32_t b = (int32_t)(a / UINT64_C(1000000000));
  </code></pre>
  
  <p>In other words, are xINTn_C macros needed at all (supposing we are using explicit casting in cases where implicit one is wrong)?</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>When compiler reads <code>1000000000</code>, is it allowed to store it as <code>int</code> in an internal representation (dropping all overflowing bits) or it must store it at highest possible precision (long long) until it resolves whole expression type? Is it an implementation-defined behavior or it is mandated by the standard?</p>