Осталась загадкой эта строка:
int i = (short) 150000;
// тут мы 150 тысяч преобразуем к short,
//но они не влезут туда и поэтому биты обрезаются и остаётся только 18928
short 16 бит до -32768 до 32767 Почему 150 тысяч не преобразовались в максимальные 32767?