Все арифметические и побитовые операторы в C всегда расширяют свои аргументы как минимум до int
, если они изначально были более короткими целочисленными типами. Вот так определяется язык. Спецификация языка называет это «интегральной рекламой».
(Основная причина этого состоит в том, чтобы упростить реализацию C на архитектурах, где аппаратное обеспечение не поддерживает эффективные операции на меньших количествах, чем полное машинное слово. Конечно, это также отчасти только потому, что так всегда работало и не может быть изменен без нарушения существующего кода, который зависит от этого поведения).