Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Почему следующая операция выдает -1?

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

Комментариев нет:

Отправить комментарий