Может кто-нибудь объяснить, как в C работает меньше, чем op?
В частности, как это работает, когда типы левых и правых операндов различны?
Сравнивает ли он их по типу первого или второго?
C определяет стандартные преобразования для разных типов. Правила немного сложны, но в основном «меньший» тип временно преобразуется в больший тип, поэтому, если вы сравните int с char, char будет конвертирован в int только для сравнения.
В соответствии со стандартом C99 для любого оператора отношений допустимы следующие операнды:
В первом случае различные типы будут конвертироваться в соответствии с обычными арифметическими преобразованиями .
Как сказал Джейсон в одном из комментариев, вы должны быть осторожны с неподписанными типами. Например, следующий код выводит BROKEN:
#include <stdio.h> int main() { int a = -1; unsigned int b = 1 << 31; if (a < b) { fprintf(stderr, "CORRECT\n"); } else { fprintf(stderr, "BROKEN\n"); } return 0; }