Из стандарта C99, раздел 6.3.1.8 («Обычные арифметические преобразования»):
, если операнд с целочисленным типом без знака имеет ранг, больший или равный рангу типадругой операнд, тогда операнд с целочисленным типом со знаком преобразуется в тип операнда с целочисленным типом без знака.
В основном, в случае вашего примера кода, unsigned int
и int
имеюттого же ранга, поэтому он эквивалентен:
(a + (unsigned int)b > 6)
Чтобы исправить это, вам нужно явно привести в другом направлении, то есть:
((int)a + b > 6)