Unsigned integer to unsigned integer or signed integer to signed
integer
If the types are identical, there is no change. If the types are
of a different size, and the value can be represented by the new type,
the value is not changed; if the value cannot be represented by the
new type, truncation or sign shifting will occur.
Signed integer to unsigned integer
The resulting value is the smallest unsigned integer type congruent
to the source integer. If the value cannot be represented by the new
type, truncation or sign shifting will occur.
Unsigned integer to signed integer
If the signed type is large enough to hold the original value,
there is no change. If the value can be represented by the new type,
the value is not changed; if the value cannot be represented by the
new type, truncation or sign shifting will occur.
Signed and unsigned character types to integer
The character types are promoted to type int.
Wide character type wchar_t to integer
If the original value can be represented by int,
it is represented as int. If the value cannot be
represented by int, it is promoted to the smallest
type that can hold it: unsigned int, long,
or unsigned long.
Signed and unsigned integer bit field to integer
If the original value can be represented by int,
it is represented as int. If The value cannot be
represented by int, it is promoted to unsigned
int.
Enumeration type to integer
If the original value can be represented by int,
it is represented as int. If the value cannot be
represented by int, it is promoted to the smallest
type that can hold it: unsigned int, long,
or unsigned long. Note that an enumerated type can
be converted to an integral type, but an integral type cannot be converted
to an enumeration.