Пропуски Junior Типы и неопределённое поведение обновлено
Продвижение unsigned char
Вопрос
unsigned char a = 200, b = 100; Выражение a + b имеет тип (1) и значение (2), а после unsigned char c = a + b; в c окажется (3).
Попробуйте сами
Заполните пропуски по номерам.
1
2
3
Показать ответ и разбор
Коротко
Перед сложением оба операнда продвигаются до int, поэтому a + b == 300 типа int. При присваивании в unsigned char значение берётся по модулю 256: 300 − 256 = 44.
Что в пропусках
1
int
2
300
3
44
Разбор
Перед сложением оба операнда продвигаются до int, поэтому a + b == 300 типа int. При присваивании в unsigned char значение берётся по модулю 256: 300 − 256 = 44. Это определено.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Объясни, что такое неопределённое поведение
Следующий вопрос
Размер long на Windows и Linux
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Сопоставьте пример и вид поведения
- Почему проверка x + 1 < x исчезла