Выбор ответа Junior Типы и неопределённое поведение спрашивают часто обновлено
Сравнение -1 и 1u
Вопрос
Что вернёт выражение -1 < 1u?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: false: -1 приводится к беззнаковому UINTMAX. По обычным арифметическим преобразованиям при смешении int и unsigned int знаковый операнд приводится к беззнаковому: -1 становится UINTMAX, а UINTMAX < 1u ложно. - Математическое ожидание true здесь не работает: сравнение идёт в…
Варианты ответа
true: -1 меньше 1, сравнение идёт по значениям- Ошибку компиляции: нельзя сравнивать
intиunsigned false: -1 приводится к беззнаковомуUINT_MAXправильный ответ- Неопределённое поведение: отрицательное в беззнаковом
Разбор
По обычным арифметическим преобразованиям при смешении int и unsigned int знаковый операнд приводится к беззнаковому: -1 становится UINT_MAX, а UINT_MAX < 1u ложно.
- Математическое ожидание
trueздесь не работает: сравнение идёт в беззнаковом типе. - Компилятор не запрещает такое сравнение, максимум предупредит (
-Wsign-compare). - Преобразование отрицательного в беззнаковое определено (по модулю 2ⁿ), UB нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char