Выбор ответа Junior Типы и неопределённое поведение спрашивают часто обновлено

Что из этого неопределённое поведение

Вопрос

Какая операция приводит к неопределённому поведению (int 32-битный)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: int x = INTMAX; x + 1;. Переполнение знакового целого это UB, даже после того как C++20 закрепил дополнительный код. - Беззнаковая арифметика определена по модулю 2ⁿ: 0u - 1 == UINTMAX. - -7 / 2 равно -3: деление обрезает к нулю, это гарантировано. -…

Варианты ответа

  1. int x = INT_MAX; x + 1;правильный ответ
  2. unsigned u = 0; u = u - 1;
  3. int x = -7 / 2;
  4. unsigned char c = 300;

Разбор

Переполнение знакового целого это UB, даже после того как C++20 закрепил дополнительный код.

  • Беззнаковая арифметика определена по модулю 2ⁿ: 0u - 1 == UINT_MAX.
  • -7 / 2 равно -3: деление обрезает к нулю, это гарантировано.
  • Преобразование 300 в unsigned char определено: берётся остаток по модулю 256, получится 44.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.