0b1000_0000_0000_0000
является литералом int
.Поэтому он представляет положительное значение 32768
, которое находится за пределами диапазона типа short
(Short.MAX_VALUE
равно 32767
).
С другой стороны, 0b1000_0000_0000_0000__0000_0000_0000_0000
также является int
литерал, поэтому его можно назначить переменной int
.В этом случае оно представляет отрицательное значение - Integer.MIN_VALUE
.
Если вы хотите присвоить s
16 младших разрядов 0b1000_0000_0000_0000
, используйте:
short s = (short)0b1000_0000_0000_0000;
Теперь s
будет содержать -32768
(что бывает Short.MIN_VALUE
).