逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面的三个运算符:
!:逻辑取反运算符(改变单个表达式的真假)
&&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
注:C语言中,非0为真,0为假。
1.逻辑取反运算符
比如,我们有一个变量叫flag,如果flag为假,要做一个什么事情,就可以这样写代码:
1 if(!flag)
2 {
3 printf("do something\n");
4 }
如果flag为真,!flag就是假,如果flag为假,!flag就是真,所以上面的代码意思是就是flag为假,执行if语句中的代码。
2.与运算符
&&就是与运算符,也是并且的意思,&&,就是一个双目操作符,使用的方法是a&&b,&&两边的表达式,都为真的时候,整个表达式才为真,只要有一个为假,则整个表达式为假。
比如:如果我们说的月份是3月~5月,是春天,那么使用代码怎么体现呢?
#include <stdio.h>
int main()
{
int month=0;
scanf("%d",month);
if(month>=3&&month<=5)
{
printf("春天\n");
}
return 0;
}
这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。
3.或运算符
||就是或运算符,也就3是或者的意思,||也是一个双目操作符,使用的方法a||b,||两边的表达式只要有一个是真的,整个表达式就是真的,两边的表达式都为假时,才为假。
比如:我们说一年中的月份12月或者1月或者2月是冬天,那么我们怎么使用代码体验呢?
#include <stdio.h>
int main()
{
int month=0;
scanf("%d",month);
if(month==12||month==1||month==2)
{
printf("冬天\n");
}
return 0;
}
4.短路
C语言逻辑运算符还有一个特点,他总是先对左侧的表达式求值,在对右边的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算,就不再对右边的操作数求值。这种情况称为“短路”。
如前面的代码:
1 if(month>=3&&month<=5)
表达式中&&的左操作数是month>=3,右操作数是month<=5,当左操作数month>=3的结果是0的时候,即使不判断month<=5,整个表达式的结果也是0(不是春季)。
所以对于&&操作符来说,左边操作数的结果为0的时候,右边的操作数就不再执行。
对于||操作符是怎样的呢?我们结合前面的代码:
1 if(month==12||month==1||month==2)
如果month==12,则不用再判断month是否等于1或者2,整个表达式的结果也是1(是冬天)。
所以,||操作符的左操作数的结果不为0时,就无需执行右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。
完