title: Cleanest way to combine two shorts to an int
body: <p>I have two 16-bit shorts (s1 and s2), and I'm trying to combine them into a single 32-bit integer (i1). According to the spec I'm dealing with, s1 is the most significant word, and s2 is the least significant word, and the combined word appears to be signed. (i.e. the top bit of s1 is the sign.)</p>
  
  <p>What is the cleanest way to combine s1 and s2?</p>
  
  <p>I figured something like</p>
  
  <pre><code>const utils::int32 i1 = ((s1&lt;&lt;16) | (s2));
  </code></pre>
  
  <p>would do, and it seems to work, but I'm worried about left-shifting a short by 16.</p>
  
  <p>Also, I'm interested in the idea of using a union to do the job, any thoughts on whether this is a good or bad idea?</p>