Java левый оператор смещения - PullRequest
0 голосов
/ 25 февраля 2019

в java, char a = 5 и использование оператора leftshift в качестве println (результат << 18) / *: 262144 * / и он по-прежнему дает дополнительные ответы после 16 бит, но не должен, потому что char в java 16 бит.Почему? </p>

1 Ответ

0 голосов
/ 25 февраля 2019

Сдвиг влево применяется к int или long операндам.Когда вы применяете его к char и int, char повышается до int, и в результате получается int.Поэтому 262144 является действительным результатом.

JLS 15.19.Операторы сдвига :

Операторы сдвига синтаксически ассоциативны слева (они группируются слева направо).

Унарное числовое продвижение (§5.6.1) выполняется для каждого операнда отдельно .(Двоичное числовое продвижение (§5.6.2) не выполняется для операндов.)

Ошибка времени компиляции, если тип каждого из операндов оператора сдвига после унарного числового продвижения равенне является примитивным целочисленным типом.

Типом выражения сдвига является повышенный тип левого операнда .

...