в java, char a = 5 и использование оператора leftshift в качестве println (результат << 18) / *: 262144 * / и он по-прежнему дает дополнительные ответы после 16 бит, но не должен, потому что char в java 16 бит.Почему? </p>
Сдвиг влево применяется к int или long операндам.Когда вы применяете его к char и int, char повышается до int, и в результате получается int.Поэтому 262144 является действительным результатом.
int
long
char
JLS 15.19.Операторы сдвига :
Операторы сдвига синтаксически ассоциативны слева (они группируются слева направо). Унарное числовое продвижение (§5.6.1) выполняется для каждого операнда отдельно .(Двоичное числовое продвижение (§5.6.2) не выполняется для операндов.) Ошибка времени компиляции, если тип каждого из операндов оператора сдвига после унарного числового продвижения равенне является примитивным целочисленным типом. Типом выражения сдвига является повышенный тип левого операнда .
Операторы сдвига синтаксически ассоциативны слева (они группируются слева направо).
Унарное числовое продвижение (§5.6.1) выполняется для каждого операнда отдельно .(Двоичное числовое продвижение (§5.6.2) не выполняется для операндов.)
Ошибка времени компиляции, если тип каждого из операндов оператора сдвига после унарного числового продвижения равенне является примитивным целочисленным типом.
Типом выражения сдвига является повышенный тип левого операнда .