This topic has been heavily discussed in many context. When I search and read some of posts. I was confused by following post.
Signed to unsigned conversion in C - is it always safe?
The following is the original question.
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
The answer simply quotes the "6.3.1.8 Usual arithmetic conversions" point 3, i.e.,
Otherwise, if the operand that has unsigned integer type has rank greater or equal to the rank of the type of the other operand, then the operand with signed integer type is converted to the type of the operand with unsigned integer type.
However, if my understanding is correct, the integer promotion should be done before considering "usual arithmetic conversions".
And the rules for that is
If an int can represent all values of the original type, the value is converted to an int . Otherwise, it is converted to an unsigned int . These conversion rules are called the integral promotions
So, that means the addition is completed with type of signed int than unsigned int. And the conversion to a large value occurs when assigning an negative to unsigned int result.
I am a bit non-confident on my understanding. Does anyone have similar confusion on that post?
Any reply or comment is welcome. Thanks advance!
Jeff