Consider the following code segments, and select the correct answer regarding the value of c at the end:

Code:
int main()
{
    int a = 1;    
    unsigned int c = ((a - 2) / 2);
    return 0;
}

int main()
{
    int a = 1;
    unsigned int c = a - 2;
    c /= 2;
    return 0;
}

Select one:
The value of c is different because of truncation.
The value of c is different because of overflow or underflow.
The value of c is the same in both cases.
The value of c is the same because truncation removes the effect of overflow or underflow.


The answer is the second one - I would like to understand why is it.

At the first main - we have a variable of type int so when we divide it by 2 - and we get minus 0.5 - truncation happens - which leaves us with 0.

At the second main - we assign to unsigned int a negative value - which creates some enormous number (the process of overflow or underflow - I'm not sure).

But, I have read a little about unsigned int and overflow/underflow in respect to that - for example, here
:
c++ - Why is unsigned integer overflow defined behavior but signed integer overflow isn't? - Stack Overflow

So what's going on here with this negative value assignment?

Thank you.