Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Integer promotions в c

#c


Вопрос короткий.

unsigned char c = 1, d = 2;
printf("%d %d %d",sizeof(c),sizeof(d),sizeof(c&d)); // выводит 1 1 4


Скажите, почему при конъюнкции получившееся выражение становится типа int? В стандарте
C99 четко сказано, что:


  The integer promotions are applied only: as part of the usual arithmetic conversions,
to certain
  argument expressions, to the operands of the unary +, -, and ~ operators, and to
both operands of the
  shift operators, as specified by their respective subclauses.


В чем причина? Буду благодарен за ответ. 
    


Ответы

Ответ 1



Так это и есть действие the usual arithmetic conversions, о которых говорится в вашей цитате. Спецификация бинарного & ясно говорит 6.5.10 Bitwise AND operator 3 The usual arithmetic conversions are performed on the operands. Для целочисленных типов the usual arithmetic conversions начинаются с integer promotions. В вашем случае сработали именно integer promotions и тип unsigned char был превращен в тип int.

Комментариев нет:

Отправить комментарий