Арифметические преобразования
Большое количество операций вызывают преобразования и дают тип результата одинаковым образом. Этот стереотип будет называться "обычным арифметическим преобразованием".
Во-первых, любые операнды типа char, unsigned char или short преобразуются к типу int.
Далее, если один из операндов имеет тип double, то другой преобразуется к типу double и тот же тип имеет результат.
Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long и таков же тип результата.
Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long и таков же тип результата.
Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned и таков же тип результата.
Иначе оба операнда должны иметь тип int и таков же тип результата.