Определение вывода при неявном преобразовании типов

При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.

Короткий ответ

Что ответить на собеседовании

При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо предсказать, какой результат появится в консоли после выполнения следующего кода:


double d = 5.8;
int i = d;
cout << d << "=" << i << "=" << (i / 2 * 2);

Ответ

При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.

d остаётся 5.8, тогда как i становится 5. Выражение i / 2 * 2 группируется слева направо: сначала 5 / 2 даёт 2, затем умножение на 2 даёт 4.

Обратное умножение не восстанавливает потерянный остаток. Для вещественного деления нужен вещественный операнд, например i / 2.0 * 2; это уже другой результат. Преобразование в int допустимо лишь при представимом целочисленном результате.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее