首页 > 编程笔记 > C语言笔记(精华版)

C语言逻辑运算符的概念以及汇总(附带实例)

C语言中的逻辑运算符是用于执行布尔运算的特殊符号,它们主要用于条件语句和循环中,帮助我们组合或修改条件表达式。理解逻辑运算符对于编写复杂的程序逻辑至关重要。

在高中数学中,我们就学过逻辑运算,例如 p 为真命题,q 为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。在C语言中,也有类似的逻辑运算:

 

运算符 说明 结合性 举例
&& 与运算,双目,对应数学中的“且” 左结合 1&&0、(9>3)&&(b>a)
|| 或运算,双目,对应数学中的“或” 左结合 1||0、(9>3)||(b>a)
! 非运算,单目,对应数学中的“非” 右结合 !a、!(2<5)


这些运算符的结果是布尔值。在C语言中,任何非零值都被视为真(true),而零被视为假(false),逻辑运算的结果要么是 1(表示真),要么是 0(表示假)。

逻辑与(&&)

逻辑与运算符 && 用于检查两个条件是否都为真。只有当两个操作数都为真时,整个表达式才为真。

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    if (a > 0 && b > 0) {
        printf("Both a and b are positive.\n");
    }
    return 0;
}

输出:

Both a and b are positive.

在这个例子中,只有当 a 和 b 都大于 0 时,才会打印消息。

逻辑或(||)

逻辑或运算符 || 用于检查两个条件中是否至少有一个为真。只要有一个操作数为真,整个表达式就为真。

#include <stdio.h>

int main() {
    int age = 25;
    if (age < 18 || age > 60) {
        printf("You are eligible for a discount.\n");
    } else {
        printf("Regular price applies.\n");
    }
    return 0;
}

输出:

Regular price applies.

在这个例子中,如果年龄小于 18 或大于 60,就会显示折扣信息。否则,显示正常价格适用。

逻辑非(!)

逻辑非运算符 ! 用于反转条件的真值。如果条件为真,! 会使其变为假,反之亦然。

#include <stdio.h>

int main() {
    int is_raining = 0;  // 0 表示没下雨
    if (!is_raining) {
        printf("It's not raining. Let's go for a walk!\n");
    }
    return 0;
}

输出:

It's not raining. Let's go for a walk!

在这个例子中,! 运算符反转了 is_raining 的值。由于 is_raining 为 0(假),!is_raining 变为真,因此打印出去散步的消息。

短路求值

C语言中的逻辑运算符使用短路求值。这意味着在 && 运算中,如果第一个条件为假,就不会检查第二个条件。类似地,在 || 运算中,如果第一个条件为真,就不会检查第二个条件。

#include <stdio.h>

int main() {
    int x = 5;
    int y = 0;
    
    // 由于 x > 10 为假,y != 0 不会被评估
    if (x > 10 && y != 0) {
        printf("This won't be printed\n");
    }
    
    // 由于 x > 0 为真,y != 0 不会被评估
    if (x > 0 || y != 0) {
        printf("This will be printed\n");
    }
    
    return 0;
}

输出:

This will be printed

运算符优先级

在复杂的表达式中,了解运算符的优先级很重要。逻辑运算符的优先级从高到低为:! > && > ||。括号可以用来改变求值顺序。

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    
    if (a < b && b < c || a > c) {
        printf("Condition is true\n");
    }
    
    // 等价于:
    if ((a < b && b < c) || a > c) {
        printf("This is the same condition\n");
    }
    
    return 0;
}

输出:

Condition is true
This is the same condition

应用场景

逻辑运算符在许多编程场景中都非常有用:


例如,以下代码展示了如何使用逻辑运算符进行输入验证:

#include <stdio.h>

int main() {
    int age;
    printf("Enter your age: ");
    scanf("%d", &age);
    
    if (age >= 18 && age <= 65) {
        printf("You are eligible for the job.\n");
    } else if (age < 18) {
        printf("Sorry, you are too young for this job.\n");
    } else {
        printf("Sorry, you are over the age limit for this job.\n");
    }
    
    return 0;
}

这个程序检查输入的年龄是否在 18 到 65 之间,并给出相应的反馈。

推荐阅读