6.3.1.1 Boolean, characters, and integers

Previous Table of Contents "New C Standard" commentary

659 Every integer type has an integer conversion rank defined as follows:

660 —  No two signed integer types shall have the same rank, even if they have the same representation.

661 —  The rank of a signed integer type shall be greater than the rank of any signed integer type with less precision.

662 —  The rank of long long int shall be greater than the rank of long int, which shall be greater than the rank of int, which shall be greater than the rank of short int, which shall be greater than the rank of signed char.

663 —  The rank of any unsigned integer type shall equal the rank of the corresponding signed integer type, if any.

664 —  The rank of any standard integer type shall be greater than the rank of any extended integer type with the same width.

665 —  The rank of char shall equal the rank of signed char and unsigned char.

666 —  The rank of _Bool shall be less than the rank of all other standard integer types.

667 —  The rank of any enumerated type shall equal the rank of the compatible integer type (see 6.7.2.2).

668 —  The rank of any extended signed integer type relative to another extended signed integer type with the same precision is implementation-defined, but still subject to the other rules for determining the integer conversion rank.

669 —  For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has greater rank than T3, then T1 has greater rank than T3.

670 The following may be used in an expression wherever an int or unsigned int may be used:

671 —  An object or expression with an integer type whose integer conversion rank is less than or equal to the rank of int and unsigned int.

672 —  A bit-field of type _Bool, int, signed int, or unsigned int.

673 If an int can represent all values of the original type, the value is converted to an int;

674 otherwise, it is converted to an unsigned int.

675 These are called the integer promotions.48)

676 All other types are unchanged by the integer promotions.

677 The integer promotions preserve value including sign.

678 As discussed earlier, whether a “plain” char is treated as signed is implementation-defined.

679 Forward references: enumeration specifiers (6.7.2.2), structure and union specifiers (6.7.2.1).

Next

Created at: 2008-01-30 02:39:41 The text from WG14/N1256 is copyright © ISO