Доброго времени суток. В книге "Java SE 8 Базовый Курс" К. Хорстманна наткнулся на задачку и не могу решить:
"Напишите программу, вводящую 2 числа в пределах 0-65535, сохраняющую их в переменных типа short и вычисляющую их сумму, разность, произведение, частное и остаток без знака, не преобразуя эти величины в тип int."
Пробовал задействовать Short.toUnsignedInt(), но по условию задания, нужно записывать в переменные типа short. Буду рад помощи.
short – 16-битное целое число, диапазон значений которого – [-(2^16)/2;(2^16)/2-1] или [-32768; 32767]. Длина этого диапазона – 2^16 или 65536.
Вам необходимо с помощью short оперировать числами из отрезка [0;65535]. Для этого, при вводе числа, можно вычитать из него некоторое смещение, которое будет равно 32768.
Вот пример:
public class Main {
private static final int sOffset = 32768;
public static void main(String[] args) {
short firstValue = stringToShort("2");
short secondValue = stringToShort("65535");
System.out.println("firstValue[short]: " + firstValue);
System.out.println("secondValue[short]: " + secondValue);
System.out.println("firstValue[original]: " + shortToInt(firstValue));
System.out.println("secondValue[original]: " + shortToInt(secondValue));
System.out.println("multiplication: " + shortToInt(firstValue)*shortToInt(secondValue));
}
private static short stringToShort(String value) {
return (short) (Integer.parseInt(value) - sOffset);
}
private static int shortToInt(short value) {
return value + sOffset;
}
}
Вывод на консоль:
firstValue[short]: -32766
secondValue[short]: 32767
firstValue[original]: 2
secondValue[original]: 65535
multiplication: 131070
Возможность хранения результата операций в short я ставлю под сомнение, так как в общем случае результат может быть вообще числом не целым.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей