Что выведет код Junior Типы и неопределённое поведение спрашивают часто обновлено
Что выведет: беззнаковое вычитание и деление
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <climits>
#include <iostream>
int main() {
unsigned int u = 0;
u -= 1;
std::cout << (u == UINT_MAX) << '\n';
std::cout << (-1 < 1u) << '\n';
std::cout << -7 / 2 << ' ' << -7 % 2 << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1, 0, -3 -1. 0u - 1 по модулю 2³² равно UINTMAX: печатается 1 (bool выводится числом).
Что выведет
1
0
-3 -1
Разбор
0u - 1 по модулю 2³² равно UINT_MAX: печатается 1 (bool выводится числом). В -1 < 1u знаковый операнд приводится к беззнаковому, сравнение ложно: 0. Деление обрезает к нулю: -7 / 2 == -3, остаток имеет знак делимого: -1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: преобразования и обрезание
Следующий вопрос
Как безопасно проверить переполнение
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char