Что выведет код Junior Типы и неопределённое поведение обновлено
Что выведет: арифметика с char и bool
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
int main() {
char c = 'a';
std::cout << c + 1 << '\n';
std::cout << char(c + 1) << '\n';
std::cout << true + true << '\n';
unsigned char a = 200, b = 100;
unsigned char s = a + b;
std::cout << a + b << ' ' << int(s) << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 98, b, 2, 300 44. c + 1 продвигается до int и печатается число 98 (код 'b'). char(c + 1) выводится символом b. true + true тоже int: 2. a + b считается в int и равно 300, а при сохранении в unsigned char берётся по модулю 256: 44.
Что выведет
98
b
2
300 44
Разбор
c + 1 продвигается до int и печатается число 98 (код 'b'). char(c + 1) выводится символом b. true + true тоже int: 2. a + b считается в int и равно 300, а при сохранении в unsigned char берётся по модулю 256: 44.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Почему проверка x + 1 < x исчезла
Следующий вопрос
Что выведет: преобразования и обрезание
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char