The result type is int
in normal C implementations.1
Per C 2011 (N1570) 6.5.7, “The integer promotions are performed on each of the operands. The type of the result is the that of the promoted left operand.”
Per 6.3.1.1 2, the integer promotions are, for objects or expressions of integer type with rank less than or equal to the rank of int and unsigned int: “If an int can represent all values of the original type (as restricted by the width, for a bit-field), the value is converted to an int; otherwise, it is converted to an unsigned int.”
1There has been discussion elsewhere in Stack Overflow from which it seems that a bizarre C implementation could have a char
of the same width as int
, which leads to some unusual behavior.