Yes, this is the effect of integer promotion. Short and char types are converted to signed int every time they are used in an expression. Unsigned shorts are extended with 0 bits (0x81d0 -> 0x000081d0), signed are extended with the value of bit 15 (0x81d0 -> 0xffff81d0).
When neither signed nor unsigned is explicitly stated, then the default is signed. (Except for the char type, where it depends on the compiler configuration and command line options, so you can never be sure.)
Yes, this is the effect of integer promotion. Short and char types are converted to signed int every time they are used in an expression. Unsigned shorts are extended with 0 bits (0x81d0 -> 0x000081d0), signed are extended with the value of bit 15 (0x81d0 -> 0xffff81d0).