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,不再对右操作数进行计算的运算称为短路求值。
标签:逻辑,操作数,month,运算符,操作符,&&,C语言,表达式 From: https://www.cnblogs.com/bjx2020/p/17583757.html