title: Why do shift operations always result in a signed int when operand is <32 bits
body: <p>Why do shift operations on unsigned ints give an unsigned result, but operations on smaller unsigned operands result in a signed int? </p>
  
  <pre><code>int signedInt = 1;
  int shiftedSignedInt = signedInt &lt;&lt; 2;
  
  uint unsignedInt = 1;
  uint shiftedUnsignedInt = unsignedInt &lt;&lt; 2;     //OK. unsigned result
  
  short signedShort = 1;
  int shiftedsignedShort = signedShort &lt;&lt; 2;
  
  ushort unsignedShort = 1;
  uint shiftedUnsignedShort = unsignedShort &lt;&lt; 2; //CS0266: Can't cast int to uint
  
  sbyte signedByte = 1;
  int shiftedSignedByte = signedByte &lt;&lt; 2;
  
  byte unsignedByte = 1;
  uint shiftedUnsignedByte = unsignedByte &lt;&lt; 2;   //CS0266: Can't cast int to uint
  </code></pre>