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
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.
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.