Выбор ответа Junior Типы и неопределённое поведение спрашивают часто обновлено
Что из этого неопределённое поведение
Вопрос
Какая операция приводит к неопределённому поведению (int 32-битный)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: int x = INTMAX; x + 1;. Переполнение знакового целого это UB, даже после того как C++20 закрепил дополнительный код. - Беззнаковая арифметика определена по модулю 2ⁿ: 0u - 1 == UINTMAX. - -7 / 2 равно -3: деление обрезает к нулю, это гарантировано. -…
Варианты ответа
int x = INT_MAX; x + 1;правильный ответunsigned u = 0; u = u - 1;int x = -7 / 2;unsigned char c = 300;
Разбор
Переполнение знакового целого это UB, даже после того как C++20 закрепил дополнительный код.
- Беззнаковая арифметика определена по модулю 2ⁿ:
0u - 1 == UINT_MAX. -7 / 2равно-3: деление обрезает к нулю, это гарантировано.- Преобразование 300 в
unsigned charопределено: берётся остаток по модулю 256, получится 44.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char