Considering the target is most likely a PC, I might go with the following for speed:
Code:
short SSExample = 0; /*4 */
unsigned short USExample = 0; /* 3 */
int SIExample = 0; /* 2 */
unsigned int UIExample = 0; /* 1 */
And for size:
Code:
short SSExample = 0; /*2 */
unsigned short USExample = 0; /* 1 */
int SIExample = 0; /* 4 */
unsigned int UIExample = 0; /* 3 */
When signedness doesn't matter, always prefer unsigned (just because*). When size matters, choose the appropriate size. When speed matters, favor the compiler's favorite choice. When other platforms matter, make a different choice. Avoid short types, default promotions are not an enjoyable consideration.
*Or perhaps because the math is generally more well-defined.