OK short - это 16-разрядное целое число. Char a, b - каждый 8-битный символ.
Итак, вы используете одну и ту же 16-битную ячейку памяти для обоих.
0000 0010 0000 0100 is the 16 bit representation of 516
0000 0010 is the 8 bit representation of 2
0000 0100 is the 8 bit representation of 4
Процессор, на котором вы работаете, имеет «младший порядок», поэтому младший байт 16-разрядного целого числа идет первым, то есть 2, а старший байт 4 - вторым.
Итак, записав 2, а затем 4 в последовательные байты и считав их обратно как 16-битное целое число, вы получите 516, то есть 2 * 256 + 4. Если вы написали 3, то 5, вы получите 3 * 256 + 5, что составляет 783.
Дело в том, что объединение помещает две структуры данных в одно и то же место памяти.