title: Is type casting needed when using NOT (~) operator on a literal integer against a 64bit variable
body: <p>Will the following work, if not what are the rules of auto type-casting that prevent it from working?</p>
  <pre><code>uint64_t u64val=3293;
  #define ALIGNsize 4
  u64val=(u64val+ALIGNsize-1)&amp;~(ALIGNsize-1);
  </code></pre>
  <p>Or is this required:</p>
  <pre><code>uint64_t u64val=3293;
  #define ALIGNsize 4
  u64val=(u64val+ALIGNsize-1)&amp;~((uint64_t)ALIGNsize-1);
  </code></pre>
  <p>If the later, are there any tricks to automate things so it's not wasteful using 32bit but still works in 64bit without having to remember or know the data size?</p>