【发布时间】:2010-01-13 15:47:12
【问题描述】:
有人能解释一下小于运算在 C 中是如何工作的吗?
特别是当左侧和右侧操作数的类型不同时它是如何工作的?
它是根据第一个还是第二个的类型来比较它们?
【问题讨论】:
标签: c comparison types operators
有人能解释一下小于运算在 C 中是如何工作的吗?
特别是当左侧和右侧操作数的类型不同时它是如何工作的?
它是根据第一个还是第二个的类型来比较它们?
【问题讨论】:
标签: c comparison types operators
C 指定不同类型的标准转换。规则有点复杂,但基本上“较小”的类型会暂时转换为较大的类型,因此如果将 int 与 char 进行比较,char 将转换为 int,仅用于比较。
【讨论】:
unsigned int 可能被认为小于负数 int。
int 的类型进行算术运算(包括比较),因此如果您将 char 与 char 进行比较,它们会 都晋升为int。
根据 C99 标准,任何关系运算符都允许以下操作数:
前一种情况,不同的类型会根据usual arithmetic conversions进行转换。
【讨论】:
就像 Jason 在其中一个 cmets 中所说,您必须小心使用无符号类型。例如下面的代码打印出 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;
}
【讨论】: