There is no operator+ for shorts, but there is one for ints, so when you write s1 + 1, you're actually asking the compiler to first promote your s1 to an int (which preserves the value: 32767 short becomes 32767 int), and then you're asking to add 1 (which is an int) to that. (technically it's a bit more complicated, search for "usual arithmetic conversions", or read
http://en.cppreference.com/w/cpp/language/operator_arithmetic )
The result, on a platform with greater than 16-bit ints, is 32768, and its type is int
Now, in the expression "cout << s2 + 1", you're using operator<<(ostream&, int) to print that int, and that's why you see the value 32768
In the expression s1 = s1 + 1, you're stuffing the int 32768 into a short. Because the short is signed, this is undefined behavior, but in your case (as in most cases) this simply produced the value according to 2's complement rules linked by kbw.