Выбор ответа Middle Типы и неопределённое поведение обновлено
Что C++20 изменил для знаковых целых
Вопрос
Что верно для знаковых целых в C++20?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Представление обязано быть дополнительным кодом, но переполнение UB. C++20 (P1236) закрепил дополнительный код и сделал определёнными, например, преобразование к знаковому типу вне диапазона и сдвиги знаковых.
Варианты ответа
- Переполнение стало определённым и заворачивается по модулю 2ⁿ
- Представление обязано быть дополнительным кодом, но переполнение UBправильный ответ
- Знаковые целые могут храниться в прямом или обратном коде на выбор
- Переполнение стало implementation-defined, как сдвиг отрицательных
Разбор
C++20 (P1236) закрепил дополнительный код и сделал определёнными, например, преобразование к знаковому типу вне диапазона и сдвиги знаковых. Но переполнение в +, -, * осталось UB: на этом держатся оптимизации циклов.
- Заворачивание по модулю гарантировано только для беззнаковых.
- Прямой и обратный код больше не разрешены.
- Implementation-defined переполнение не стало.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char
- Размер long на Windows и Linux
- Сопоставьте пример и вид поведения
- Почему проверка x + 1 < x исчезла