Страницы

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

понедельник, 8 октября 2018 г.

Увеличение целого на вещественный ноль

Имеется следующий код:
int i = 2020202048; i += 0.0f; System.out.println(i);
Выводит:
2020201984
Почему?


Ответ

Проблема кроется в составном операторе присваивания +=. Согласно документации исходное выражение i += 0.0f; разворачивается в i = (int)(i + 0.0f);. Выражение в скобках будет иметь тип float, в котором исходное число 2020202048 не имеет точного представления и таким образом изменяется до 2020201984.0f, которое потом приводится снова к int
Неочевидность кода в вопросе в первую очередь обусловлена именно неявным преобразованием int → float → int (о чем уже упоминалось в комментариях к вопросу), которое происходит при использовании += с разными типами аргументов.

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

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