Обычные арифметические преобразования в C: каково обоснование этого конкретного правила
От K & R C
Во-первых, если один из операндов long long, другой преобразуется в long double.В противном случае, если один из операндов является двойным, другой преобразуется в двойной.В противном случае, если один из операндов является float, другой преобразуется в float.В противном случае интегральные продвижения выполняются для обоих операндов.; ...Это будет означать под выражением
char a,b,c;
c=a+b;
на самом деле рассчитывается как
c = char((int)a+(int)b);
В чем причина этого правила?
Происходят ли эти преобразования, если a, b и c были короткими?