UInt16 = ushort = char = 0..65535 = 2 байта без знака = 16 бит
Таким образом, вы можете поместить символ в UInt16, который является ushort.
Int16 = short! =char = -32768..32767 = 2 байта со знаком = 15 бит + 1 знак
Таким образом, без использования правильного приведения или преобразования вы не можете поместить символ в Int16, потому что недостаточно двоичного пространства для размещения 16 битв 15 битах.
Это похоже на попытку залить 1 литр воды в чашку чая: вы получаете переполнение.
Поведение по умолчанию в C # состоит в том, что не выкидывает событие, когдапереполнение.
Для этого есть ключевое слово checked
.
Здесь компилятор не позволяет вам назначить символ для Int16, потому что он точно знает, что вы пытаетесь сделать, и отказываетсясделайте это.
Изучите основы переменных типов данных C #
Без знака и со знаком
Поведение смещениядля целых чисел со знаком
Учебник по представлению данных
Целочисленное переполнение
Двоичное переполнение