C语言关系运算符 #

一、关系运算符概述 #

1.1 关系运算符列表 #

运算符 名称 示例 含义
== 等于 a == b a等于b
!= 不等于 a != b a不等于b
> 大于 a > b a大于b
< 小于 a < b a小于b
>= 大于等于 a >= b a大于等于b
<= 小于等于 a <= b a小于等于b

1.2 返回值 #

关系表达式的结果是整数:

  • 真:返回 1
  • 假:返回 0
c
#include <stdio.h>

int main() {
    int a = 5, b = 3;
    
    printf("a == b: %d\n", a == b);
    printf("a != b: %d\n", a != b);
    printf("a > b: %d\n", a > b);
    printf("a < b: %d\n", a < b);
    printf("a >= b: %d\n", a >= b);
    printf("a <= b: %d\n", a <= b);
    return 0;
}

输出:

text
a == b: 0
a != b: 1
a > b: 1
a < b: 0
a >= b: 1
a <= b: 0

二、等于运算符 #

2.1 基本使用 #

c
#include <stdio.h>

int main() {
    int a = 5, b = 5, c = 3;
    
    printf("a == b: %d\n", a == b);
    printf("a == c: %d\n", a == c);
    return 0;
}

2.2 注意区分赋值运算符 #

c
if (a = 5) {
    printf("总是执行\n");
}

if (a == 5) {
    printf("a等于5时执行\n");
}

= 是赋值,== 是比较。

2.3 浮点数比较 #

c
#include <stdio.h>
#include <math.h>

int main() {
    float a = 0.1f + 0.2f;
    float b = 0.3f;
    
    printf("a = %.20f\n", a);
    printf("b = %.20f\n", b);
    printf("a == b: %d\n", a == b);
    
    if (fabs(a - b) < 1e-6) {
        printf("近似相等\n");
    }
    return 0;
}

浮点数比较应使用误差范围。

三、不等于运算符 #

3.1 基本使用 #

c
#include <stdio.h>

int main() {
    int a = 5, b = 3;
    
    if (a != b) {
        printf("a不等于b\n");
    }
    return 0;
}

3.2 检查指针是否为空 #

c
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* p = (int*)malloc(sizeof(int));
    
    if (p != NULL) {
        *p = 10;
        printf("%d\n", *p);
        free(p);
    }
    return 0;
}

四、大于小于运算符 #

4.1 基本使用 #

c
#include <stdio.h>

int main() {
    int a = 5, b = 3;
    
    printf("a > b: %d\n", a > b);
    printf("a < b: %d\n", a < b);
    printf("a >= b: %d\n", a >= b);
    printf("a <= b: %d\n", a <= b);
    return 0;
}

4.2 字符比较 #

c
#include <stdio.h>

int main() {
    char c1 = 'A', c2 = 'a';
    
    printf("'A' < 'a': %d\n", c1 < c2);
    printf("'A' == 65: %d\n", c1 == 65);
    return 0;
}

字符按ASCII码值比较。

4.3 字符串比较 #

c
#include <stdio.h>
#include <string.h>

int main() {
    char s1[] = "apple";
    char s2[] = "banana";
    
    if (strcmp(s1, s2) < 0) {
        printf("%s 小于 %s\n", s1, s2);
    }
    return 0;
}

字符串比较使用 strcmp 函数。

五、链式比较 #

5.1 错误写法 #

c
if (1 < a < 10) {
}

这不会按预期工作,因为 1 < a 返回0或1。

5.2 正确写法 #

c
if (a > 1 && a < 10) {
}

六、C99布尔类型 #

6.1 使用stdbool.h #

c
#include <stdio.h>
#include <stdbool.h>

int main() {
    bool a = true;
    bool b = false;
    
    printf("true = %d\n", a);
    printf("false = %d\n", b);
    printf("5 > 3 = %s\n", 5 > 3 ? "true" : "false");
    return 0;
}

6.2 布尔表达式 #

c
#include <stdio.h>
#include <stdbool.h>

bool is_even(int n) {
    return n % 2 == 0;
}

int main() {
    if (is_even(4)) {
        printf("4是偶数\n");
    }
    return 0;
}

七、常见错误 #

7.1 混淆 == 和 = #

c
if (a = 5) {
}

应改为:

c
if (a == 5) {
}

7.2 浮点数直接比较 #

c
float a = 0.1 + 0.2;
if (a == 0.3) {
}

应使用误差比较。

7.3 字符串直接比较 #

c
char s1[] = "hello";
char s2[] = "hello";
if (s1 == s2) {
}

应使用 strcmp

八、总结 #

关系运算符 #

运算符 说明 返回值
== 等于 1或0
!= 不等于 1或0
> 大于 1或0
< 小于 1或0
>= 大于等于 1或0
<= 小于等于 1或0

注意事项 #

  • 区分 ===
  • 浮点数使用误差比较
  • 字符串使用 strcmp
  • 链式比较使用 &&

下一步,让我们学习逻辑运算符!

最后更新:2026-03-26