Помогите прочитать код
Не могу понять почему так:
class Puzzle {
private static boolean condition;
public static void main(String[] args) {
String answer = "Какое самое главное число во вселенной?";
byte initialSum = 120;
short additionalSum = 31999;
int secretSum = 162;
byte number = (byte) (initialSum * additionalSum + secretSum);
if (!condition) {
answer = "Ответ на главный вопрос жизни, вселенной и всего такого: ";
System.out.println(answer + number);
} else {
System.out.println(answer);
}
//Ответ на главный вопрос жизни, вселенной и всего такого: 42
Я новичок и просто не могу додуматься почему 42:)
Ответы (2 шт):
Автор решения: Serge3leo
→ Ссылка
Потому что преобразование к byte берёт младшие 8 бит, грубо говоря, вычисляет значение по модулю 256, и condition гарантировано инициализируются false.
Это если вопрос не за то, почему именно 42. (Да, у Вас закрывающая фигурная скобочка - отклеилась!)
Автор решения: kami
→ Ссылка
Явное приведении простых типов
Основной код - byte number = (byte) (initialSum * additionalSum + secretSum); будет выполняться в следующем порядке:
- "Выравнивание" типов параметров (xxxSum) до int, как наиболее "толстого" из них.
- Вычисление выражения:
120 * 31999 + 162 = 3 840 042в десятичной или3A 98 2Aв шестнадцатиричной системе счисления - Явное приведение int к byte, в результате от 32 бит (4 байт) остаётся только младший один байт, с содержимым
2A, что в переводе на десятичную будет42. - condition - boolean переменная, имеющая по умолчанию значение
false