double m = (byte) 110_987_654_6299.123_34;
Ответ
Справедливости ради стоит отметить, что результатом (значением m) будет -1.0, а не -1
Происходят 3 действия:
double число 110_987_654_6299.123_34 приводится к int. Результатом будет 2147483647
int число 2147483647 приводится к byte. Результатом будет -1
byte число -1 приводится к double. Результатом будет -1.0
Почему приведение работает именно так - можно прочитать в документации.
Если вкратце, то:
при приведении double к byte (правая часть выражения) сначала происходит приведение double к int, и только затем - int к byte
приведение double к int в случае превышения допустимого int значения возвращает максимальное значение int
приведение int к byte просто берёт последние 8 бит из int
Комментариев нет:
Отправить комментарий