как оператор менее чем (<) работает со смешанными типами в c - PullRequest
2 голосов
/ 13 января 2010

Может кто-нибудь объяснить, как в C работает меньше, чем op?

В частности, как это работает, когда типы левых и правых операндов различны?

Сравнивает ли он их по типу первого или второго?

Ответы [ 3 ]

10 голосов
/ 13 января 2010

C определяет стандартные преобразования для разных типов. Правила немного сложны, но в основном «меньший» тип временно преобразуется в больший тип, поэтому, если вы сравните int с char, char будет конвертирован в int только для сравнения.

1 голос
/ 13 января 2010

В соответствии со стандартом C99 для любого оператора отношений допустимы следующие операнды:

  • два операнда с вещественными арифметическими типами
  • два указателя на объекты одного типа

В первом случае различные типы будут конвертироваться в соответствии с обычными арифметическими преобразованиями .

0 голосов
/ 13 января 2010

Как сказал Джейсон в одном из комментариев, вы должны быть осторожны с неподписанными типами. Например, следующий код выводит 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;
}
...