So when using unsigned int a=- 12, there is no conversion step mentioned above. %d is a signed integer and the output is-12, no problem.
When the unsigned short a=- 12, note that a is 16, and in memory it is111165438+. Converting to int type will become 32 bits, and the program will add 16 zeros on the left to become 00000000011111/.