关系运算符
关系运算符(也称比较运算符)用于检验两个操作数的值是否满足某种关系。如果关系成立,表达式的返回值为 int
类型的 1
;如果为假,则返回 0
。这些运算符是构建程序逻辑和控制流程(如 if
语句和 while
循环)的基础。
运算符 | 名称 | 示例 | 描述 |
---|---|---|---|
== | 等于 (Equal to) | a == b | 如果 a 的值等于 b,则为真 (1 ) |
!= | 不等于 (Not equal to) | a != b | 如果 a 的值不等于 b,则为真 (1 ) |
> | 大于 (Greater than) | a > b | 如果 a 的值大于 b,则为真 (1 ) |
< | 小于 (Less than) | a < b | 如果 a 的值小于 b,则为真 (1 ) |
>= | 大于或等于 (Greater than or equal to) | a >= b | 如果 a 的值大于或等于 b,则为真 (1 ) |
<= | 小于或等于 (Less than or equal to) | a <= b | 如果 a 的值小于或等于 b,则为真 (1 ) |
1. 相等性运算符 (==
, !=
)
这两个运算符用于判断操作数是否相等。
- 等于 (
==
): 检查两个操作数的值是否完全相同。 - 不等于 (
!=
): 检查两个操作数的值是否不同。
示例:
c
int a = 5;
int b = 5;
int c = 10;
int result1 = (a == b); // a 和 b 的值相等,result1 的值为 1 (真)
int result2 = (a == c); // a 和 c 的值不相等,result2 的值为 0 (假)
int result3 = (a != c); // a 和 c 的值不相等,result3 的值为 1 (真)
1
2
3
4
5
6
7
2
3
4
5
6
7
注意:==
与 =
的区别
这是一个非常常见的初学者错误:
==
是比较运算符,用于判断两个值是否相等。=
是赋值运算符,用于将右侧的值赋给左侧的变量。
在 if
语句中误用 =
会导致逻辑错误,且通常不会产生编译警告,因为赋值表达式本身求值也会得到一个值(即赋的值),在 C 语言中非零值会被视为“真”。
c
int a = 5;
if (a = 10) { // 错误!这里是赋值操作
// (a = 10) 这个表达式的值是 10
// 所以这个 if 代码块总是会执行,并且 a 的值被意外地修改为 10
printf("a 的值现在是: %d\n", a);
}
1
2
3
4
5
6
2
3
4
5
6
2. 比较运算符 (>
, <
, >=
, <=
)
这四个运算符用于比较两个操作数的相对大小。它们可以用于任何算术类型(整数和浮点数)。
- 大于 (
>
) - 小于 (
<
) - 大于或等于 (
>=
) - 小于或等于 (
<=
)
示例:
c
int score = 88;
int is_excellent = (score >= 90); // 88 >= 90 为假,is_excellent 的值为 0
int is_pass = (score >= 60); // 88 >= 60 为真,is_pass 的值为 1
double temperature = -5.5;
int is_freezing = (temperature < 0.0); // -5.5 < 0.0 为真,is_freezing 的值为 1
1
2
3
4
5
6
7
2
3
4
5
6
7
运算符的优先级
- 关系运算符 (
>
,<
,>=
,<=
) 的优先级高于相等性运算符 (==
,!=
)。 - 所有关系运算符的优先级都低于算术运算符 (
+
,-
,*
,/
等)。 - 所有关系运算符的优先级都高于逻辑运算符 (
&&
,||
)。
这意味着在一个复杂的表达式中,会先进行算术运算,然后是关系比较,最后是逻辑运算。
示例:
c
int a = 5, b = 10, c = 10;
// 运算顺序:
// 1. (a + 5) -> 10
// 2. (10 < b) -> (10 < 10) -> 0 (假)
// 3. (c == b) -> (10 == 10) -> 1 (真)
// 4. (0 && 1) -> 0 (假)
int result = a + 5 < b && c == b; // result 的值为 0
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
但为了代码的清晰和可读性,强烈建议使用圆括号 ()
来明确指定运算顺序。
c
int result = ((a + 5) < b) && (c == b);
1