Страницы

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

воскресенье, 1 декабря 2019 г.

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

#java


Имеется следующий код:

int i = 2020202048; 
i += 0.0f; 
System.out.println(i);


Выводит:


  2020201984


Почему?
    


Ответы

Ответ 1



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

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

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