介绍
逻辑操作符是双目操作符中的一种,它起到一种判断作用,只有两边表达式为真或有一个为真才会执行。
这个操作符的关系有点绕,我们需要很清楚地知晓它的生效逻辑,方便我们在后续代码学习中更好的使用这个操作符
逻辑与&逻辑或
我们需要认识的逻辑操作符就是以下两个
- 逻辑与 &&
- 逻辑或 ||
逻辑与
符号: &&
同时为真才为真 1
有一个为假即为假
逻辑或
符号: ||
同时为真==>真
同时为假==>假
一真一假==>真
简单代码演示
先用一个简单的代码示例来了解这两个操作符
#include<stdio.h>
int main()
{
int a = 1;
int b = 0;
if (a && b)
{
printf("hehe\n");
}
return 0;
}
这个代码的执行结果如下图所示
a为真,b为假的情况下,逻辑与操作符是不会打印的
当我们把它换成逻辑或的时候
代码就会打印hehe
同样的,当a和b两个都为0的时候,逻辑与和逻辑或都不会打印
当a和b两个都为非0,即都为真的情况下,逻辑与和逻辑或都会打印
稍微复杂的逻辑操作符应用
情况一
让我们来看看以下这个稍微复杂的代码
别急着往下滑,思考一下这个代码的a,b,c,d打印的结果分别是什么?
#include<stdio.h>
int main()//情况1
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
return 0;
}
常见错误答案1,3,3,5
答案揭晓:
a,b,c,d分别打印了1,2,3,4
这是为什么呢?
这里需要我们对前置++与后置++的关系有所了解
前置++与后置++
- 前置++ 先++再使用
- 后置++ 先使用再++
了解了这个了,让我们继续分析上述代码
首先是第一个a++,a原本等于0,为假,在这里逻辑与操作符已经判断为假,操作符不执行
但这里我们的a已经进入计算,所以a++仍会执行,a=1
因为第一个逻辑与操作符判断为假不执行,返回的是假(即返回0)
所以第二个逻辑与也判断为假,不执行&&右边的代码
小结:
这串代码中只执行了a++,其他bcd没有执行,不受影响
答案就是1,2,3,4
情况二
先思考以下代码的答案,再往下滑~
int main()//情况2
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
return 0;
}
答案揭晓:
这里又是怎么一回事呢?
第一个逻辑与中a=1,b=3(前置++先加加后使用,b=2+1=3)
操作符判断两个都为真,两个都执行
第二个逻辑与 也判断为真,执行
注意,逻辑与中需要判断是否为真
如果前面为假,那后续都为假,无需执行后续内容
如果前面为真,需要继续判断后面的是否为真
结果即为
a=1++=2,b=++2=3,c=3,d=4++=5
情况三
接着我们看逻辑或,同样的前置条件
int main()//情况3
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
return 0;
}
这次我们先分析一波
逻辑或是只要一个为真即为真,两个都为假才为假
所以只要第一位为真,后续的就不执行
第一位为假,需要继续执行判断后面的是否为假
这个代码中,因为第一个a=1已经为真,返回的是真,所以后续的不用判断
++b和d++都不会执行
结果如下
情况四
int main()//情况4
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
return 0;
}
这里第一位a=0判断为假,后续的需要继续执行判断是否为真
因为b=3为真,式子为真,所以不执行后面的d++
结果如下:
结语
不知你是否看懂了上面的4个案例
如果这对你有帮助,还请点个赞再走吧!
非0为真,0为假 ↩︎