Выбор ответа Middle Типы и неопределённое поведение обновлено

Что C++20 изменил для знаковых целых

Вопрос

Что верно для знаковых целых в C++20?

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

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

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

Коротко

Правильный ответ: Представление обязано быть дополнительным кодом, но переполнение UB. C++20 (P1236) закрепил дополнительный код и сделал определёнными, например, преобразование к знаковому типу вне диапазона и сдвиги знаковых.

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

  1. Переполнение стало определённым и заворачивается по модулю 2ⁿ
  2. Представление обязано быть дополнительным кодом, но переполнение UBправильный ответ
  3. Знаковые целые могут храниться в прямом или обратном коде на выбор
  4. Переполнение стало implementation-defined, как сдвиг отрицательных

Разбор

C++20 (P1236) закрепил дополнительный код и сделал определёнными, например, преобразование к знаковому типу вне диапазона и сдвиги знаковых. Но переполнение в +, -, * осталось UB: на этом держатся оптимизации циклов.

  • Заворачивание по модулю гарантировано только для беззнаковых.
  • Прямой и обратный код больше не разрешены.
  • Implementation-defined переполнение не стало.

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

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