Сравнение int и unsigned int: почему выбирается неожиданная ветка
int n = -1;
unsigned int m = 1;
if (n < m)
puts("n меньше");
else
puts("n не меньше");
Что напечатает программа и почему?
- «n меньше»: сравнение выполняется по математическому значению, а -1 действительно меньше единицы
- «n не меньше»: перед сравнением n преобразуется к unsigned и становится очень большим числом
- Поведение не определено: результат зависит от компилятора, уровня оптимизации и разрядности платформы
- Код не соберётся: стандарт запрещает сравнивать int и unsigned int без явного приведения типа
