@AC: Sigh... seriously?
Wow! Am I glad you don't work for me.
No... it won't exit immediately.
"u < 200" is not the condition to exit the loop, it's the condition to remain in the loop.
Therefore the loop will count down quite happily with this condition.
If "u" were signed, the loop would continue until "u" reaches it's minimum negative value, which depends on the number of bits representing the integer. "u" will then wrap to the maximum positive value for that signed integer type, and the loop will end.
Assuming unsigned, since the loop begins at 100, it will reach zero before wrapping back to the maximum for an unsigned integer. Which again depends on the number of bits representing it. And is irrelevant, because for anything more than 7 bits, it will be greater than 200 so the loop ends.
100 to zero inclusive is 101 iterations.
And do you really want to get into it over implicit vs. explicit declaration?
Casting i.e. implicit conversion will depend on whether or not "u" is declared explicit, as well as any qualifiers assigned to the constants. In this case, no mention of explicit means we can assume non-explicit declaration. And since the "200" is not qualified (e.g. not "200L"), the compiler should treat it as the same type as "u".
If not, there will be a warning about signed/unsigned conversion leading to a possible loss of data (unless the warning is disabled, or it's severity level is below the compiler's warning threshold).