Вопросы к Поиску с Алисой
Проблема возникает при сравнении беззнакового и знакового чисел, потому что они отличаются при хранении в памяти. alexgyver.ru Особенно ошибки возможны, если знаковое число отрицательное. alexgyver.ru
Для корректного сравнения целочисленных типов их нужно привести к одному типу. alexgyver.ru Иначе компилятор сделает это сам: приведёт знаковое число к беззнаковому типу. alexgyver.ru Если оно было отрицательным, получится другое число, и сравнение будет некорректным. alexgyver.ru
Также проблема связана с тем, что из-за арифметики дополнения 2 очень маленькое отрицательное целочисленное значение имеет то же битовое представление, что и очень большое целое значение без знака (например, -1 = 0xFFFF = 65535). stackoverflow.com