Возможный дубликат:
Добавление двух символов создает int
Учитывая следующий код С++:
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = (a + b) / 2;
Результат равен 150, поскольку логически ожидалось, однако не должно быть целочисленного переполнения в выражении (a + b)
?
Очевидно, что здесь должно быть целочисленное продвижение, чтобы справиться с переполнением, или что-то еще происходит, что я не вижу. Мне было интересно, может ли кто-нибудь просветить меня, поэтому я могу знать, что я могу, и не должен полагаться на целую рекламу и переполнение.