2GRRRL Power к чему пришли сравнение должно быть знаковым но при определенных обстоятельствах включенной оптимизации знании компилятором значения второго операнда и если это не повлияет на результат то может сгенерить и беззнаковое но так как беззнаковое может сгенерить когда это не повлияет на результат следует всегда смотреть возможные проблемы именно при знаковом сравнении полагатся на беззнаковое сравнение будет ошибкой полагаясь что сравнение беззнаковое можно подумать что это условие ложно всегда так как -1 будет максимумом но это же ошибка int _32 = -1; if((unsigned char)a > _32) следует рассматривать именно знаковое сравнение