C语言三种逻辑运算符有何区别与使用场景?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文
  1. 逻辑与 (&&)
  2. 逻辑或 ()
  3. 逻辑非 ()

下面我们来详细解释每一种运算符。

c语言提供的三种逻辑运算符
(图片来源网络,侵删)

逻辑与 (&&)

&& 运算符是一个二元运算符,需要两个操作数,它返回一个布尔值(在C语言中,用 1 表示 true0 表示 false)。

规则: 只有当两个操作数都为真时,整个表达式的结果才为真,否则,结果为假。

可以把它理解为“。

操作数A 操作数B A && B 的结果
真 (1) 真 (1) 真 (1)
真 (1) 假 (0) 假 (0)
假 (0) 真 (1) 假 (0)
假 (0) 假 (0) 假 (0)

示例:

c语言提供的三种逻辑运算符
(图片来源网络,侵删)
int age = 25;
int isStudent = 1; // 1代表真
// 检查年龄是否大于18岁 *** 是否是学生
if (age > 18 && isStudent) {
    printf("你可以享受学生折扣,\n");
} else {
    printf("你不符合学生折扣条件,\n");
}
// 输出: 你可以享受学生折扣。

短路求值: && 运算符具有“短路求值”的特性,如果第一个操作数为假,整个表达式必然为假,因此C语言不会再去计算第二个操作数,直接得出结果,这在提高效率和避免错误方面非常有用。

示例:

int x = 5;
int y = 10;
// 因为 x < 0 为假,所以整个表达式为假,y++ 不会被执行
if (x < 0 && y++) {
    // ...
}
printf("x = %d, y = %d\n", x, y); // 输出: x = 5, y = 10

逻辑或 ()

运算符也是一个二元运算符,需要两个操作数。

规则: 只要两个操作数中至少有一个为真,整个表达式的结果就为真,只有当两个操作数都为假时,结果才为假。

c语言提供的三种逻辑运算符
(图片来源网络,侵删)

可以把它理解为“或者”。

| 操作数A | 操作数B | A || B 的结果 | | :------ | :------ | :------------- | | 真 (1) | 真 (1) | 真 (1) | | 真 (1) | 假 (0) | 真 (1) | | 假 (0) | 真 (1) | 真 (1) | | 假 (0) | 假 (0) | 假 (0) |

示例:

char grade = 'B';
// 检查成绩是否为'A' **或者** 'B'
if (grade == 'A' || grade == 'B') {
    printf("恭喜!你获得了优秀或良好的成绩,\n");
} else {
    printf("继续努力!\n");
}
// 输出: 恭喜!你获得了优秀或良好的成绩。

短路求值: 运算符也具有“短路求值”的特性,如果第一个操作数为真,整个表达式必然为真,因此C语言不会再去计算第二个操作数

示例:

int a = 2;
int b = 5;
// 因为 a > 0 为真,所以整个表达式为真,b++ 不会被执行
if (a > 0 || b++) {
    // ...
}
printf("a = %d, b = %d\n", a, b); // 输出: a = 2, b = 5

逻辑非 ()

运算符是一个一元运算符,只需要一个操作数,它用于“反转”操作数的逻辑状态。

规则:

  • 如果操作数为真 (1),则 运算符的结果为假 (0)。
  • 如果操作数为假 (0),则 运算符的结果为真 (1)。

可以把它理解为“非”或“取反”。

操作数A !A 的结果
真 (1) 假 (0)
假 (0) 真 (1)

示例:

int isRaining = 0; // 0代表假,表示没下雨
// 检查是否 **没有** 下雨
if (!isRaining) {
    printf("天气不错,可以去散步了,\n");
} else {
    printf("下雨了,记得带伞,\n");
}
// 输出: 天气不错,可以去散步了。

运算符常用于将一个非零值(在C语言中,任何非零值都视为真)转换为假,或将零转换为真。

示例:

int number = 123; // 一个非零值
// !number 的结果是 0 (假)
if (!number) {
    printf("number是0,\n"); // 这行代码不会执行
}
int zero = 0;
// !zero 的结果是 1 (真)
if (!zero) {
    printf("number是0,\n"); // 这行代码会执行
}

总结与注意事项

运算符 名称 类型 规则 示例
&& 逻辑与 二元 两真才为真,否则为假 a > 0 && b < 10
逻辑或 二元 一真即为真,两假才为假 a == 1 \|\| b == 2
逻辑非 一元 取反,真变假,假变真 !(a > 0)

重要注意事项:

  1. 操作数是表达式,而非布尔值:在C语言中,逻辑运算符的操作数可以是任何表达式,编译器会判断表达式的值是否为0,如果值为0,则视为假;如果值为非0,则视为真。

    int x = 5;
    if (x) { // 等价于 if (x != 0)
        printf("x是非零值,\n"); // 会执行
    }
  2. 不要混淆赋值运算符 () 和关系运算符 ():这是一个常见的错误,逻辑运算符通常与关系运算符结合使用,而关系运算符用于比较。

    // 错误示例:将赋值 x=5 放在 if 条件中
    if (x = 5) { // 这总是为真,因为赋值表达式的结果是5(非零)
        // ...
    }
    // 正确示例:比较 x 是否等于 5
    if (x == 5) {
        // ...
    }
  3. 运算符优先级: 的优先级最高,其次是 &&,最后是 ,使用括号 可以明确表达计算顺序,提高代码可读性。

    // 等价于 if ((a > 0) && (b < 10))
    if (a > 0 && b < 10) {
        // ...
    }
    // 等价于 if (!(a > 0))
    if (!a > 0) { // !a 的结果是0或1,然后与0比较,逻辑上等同于 a <= 0
        // ...
    }
    // 更清晰的写法是:
    if (!(a > 0)) { // 或者 if (a <= 0)
        // ...
    }
-- 展开阅读全文 --
头像
织梦淘宝客模板怎么选?
« 上一篇 今天
dede栏目页更新失败怎么办?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]