C语言 逻辑运算符

C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符 描述 实例
&& 称为逻辑运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。
|| 称为逻辑运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。
! 称为逻辑运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。

示例:初探逻辑运算符

#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;

    ++i || ++j && ++k;

    printf("%d\n", i);
    printf("%d\n", j);
    printf("%d\n", k);

    return 0;
}

运行结果:

C语言逻辑运算符

逻辑运算符中的短路

||从左向右开始计算:

  • 当遇到为真的条件时停止计算,整个表达式为真
  • 所有条件为假时表达式为假

&&从左向右开始计算:

  • 当遇到为假的条件时停止计算,整个表达式为假
  • 所有条件为真时表达式为真

逻辑表达式中,&&比||具有更高的优先级

逻辑与和逻辑或的优先级

在&&和||混合运算时,整个表达式被看作||表达式,编译器从左向右开始计算&&表达式,当某个&&表达式的值为真时,停止计算,整个表达式的值为真。

示例:程序中的短路规则

#include <stdio.h>

int g = 0;

int f()
{
    printf("In f()...\n");

    return g++;
}

int main()
{
    if( g || f() && f() )
    {
        printf("In if statement: %d\n", g);
    }

    printf("In main(): %d\n", g);

    return 0;
}

输出结果:

C语言程序中的短路规则

非(!)逻辑运算符

C语言中的逻辑非(!)只认得0,只知道见了0就返回1,因此当其碰见的值不是0时,其结果为0.

#include <stdio.h>

int main()
{
    printf("%d\n", !0);
    printf("%d\n", !1);
    printf("%d\n", !100);
    printf("%d\n", !-1000);

    return 0;
}

输出结果:

C语言非逻辑运算符

总结

  • 程序中的逻辑表达式遵从短路规则
  • 在&&和||混合运算时
    • 整个表达式被看作||表达式
    • 从左向右先计算&&表达式
    • 最后计算||表达式
  • 逻辑非!运算符只认得0,碰见0返回1,否则返回0
  • 只有0才代表假,其余的所有值均代表真

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C语言教程