See here for the integer conversion rules:
In your first example, since all the variables are integers, no conversion will take place.
In the second example, since the variable are smaller than int, they will be promoted to int before the operation is performed.
The reason it appears to work in MSVC is that they use 4 byte integers.