C语言中的逻辑操作符

C语言中的逻辑操作符

逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。

  • !:逻辑取反运算符(改变单个表达式的真假)。
  • &&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  • ||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

注:C语⾔中,⾮0表⽰真,0表⽰假

1.1 逻辑取反运算符

比如,我们有一个变量叫flag,如果我们flag为假,要做一个什么事情,就可以这样写代码:

if(flag)
{
    printf("do something\n")
}

1.2 与运算符

&&就是与运算符,也是并且的意思,&&是一个双目操作符,使用的方式是a&&b,&&两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。

比如:我们说月份是3月到5月,是春天,那使用代码怎么体现呢?

#include <stdio.h>

int main()
{
	printf("请输入一个1-12的整数:");
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5)
	{
		printf("春季\n");
	}
	return 0;
}

这里的意思就是month既要大于等于3,又要小于等于5,必须同时满足。

1.3 或运算符

||就是或运算符,也就是或者的意思,||也是一个双目操作符,使用的方式是a||b||两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如:我们说一年中月份为12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?

#include <stdio.h>

int main()
{
	printf("请输入一个1到12的月份整数:");
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2)
	{
		printf("冬季\n");
	}
	return 0;

}

1.4 闰年的判断

输入一个年入year,判断year是否为闰年。
判断规则:

1.能被4整除斌且不能被100整除的是闰年;
2.能被400整除的是闰年。

#include <stdio.h>

int main()
{
	printf("请输入年份:");
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
	{
		printf("是闰年");
	}
	else
	{
		printf("不是闰年");
	}
	return 0;
}

1.5 短路

C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为"短路"。

如前面的代码:

if(month >= 3 && month <=5)

表达式中&&的左操作数是month>=3,右操作数是month <=5,当左操作数month>=3的结果是0的时候,即使不判断month <=5 ,整个表达式的结果也是0(不是春季)。

所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。

对于||操作符是怎么样呢?我们结合前面的代码:

if(month == 12 || month == 1 || month == 2)

如果month == 12,则不再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。

所以,||操作符的左操作数的结果不为0时,就无需执行右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果i,不再对右操作数进行计算的运算称为短路求值

posted @ 2023-07-26 22:59  davie2020  阅读(110)  评论(0编辑  收藏  举报