C 语言 - 逻辑运算和短路求值

Posted sch01ar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言 - 逻辑运算和短路求值相关的知识,希望对你有一定的参考价值。

逻辑运算符:

运算符 含义 优先级
! 逻辑非
&& 逻辑与
|| 逻辑或

 

 

 

 

举例:

!a:如果 a 为真,!a 为假;如果 a 为 假,!a 为真

a && b:a 和 b 同时为真,结果才为真;a 和 b 有一个为假,结果就为假

a || b:a 和 b 有一个为真或 a 和 b 全为真,结果就为真;a 和 b 全为假,结果才为假

逻辑表达式:

用逻辑运算符将两边的变量、数据或表达式连接起来,称之为逻辑表达式

#include <stdio.h>

int main()
{
	printf("%d
", 3 > 1 && 1 < 2);
	printf("%d
", 3 < 1 && 1 < 2);
	printf("%d
", !(1));
	printf("%d
", !0 + 1 < 1 || !(3 + 1));
	printf("%d
", ‘a‘ - ‘b‘ && ‘c‘);

	return 0;
}

运行结果

技术分享图片

!0 + 1 < 1 || !(3 + 1):!0 等于 1,1 + 1 小于 1,结果为0;3 + 1 等于 4,!(4) 为 0,所以结果为 0

‘a‘ - ‘b‘ && ‘c‘:‘a‘ - ‘b‘ 的值为 -1,不等于 0,为真;‘c‘ 的值也不为 0,所以结果为 1

短路求值:

短路求值又称最小化求值,是一种逻辑运算符的求值策略

#include <stdio.h>

int main()
{
	int a = 3, b = 3;
	(a = 4) && (b = 5);
	printf("a 的值为 %d ,b 的值为 %d
", a, b);
	(a = 1) || (b = 5);
	printf("a 的值为 %d, b 的值为 %d
", a, b);
	return 0;
}

运行结果

技术分享图片

#include <stdio.h>

int main()
{
	int a = 3, b = 3;
	(a = 0) && (b = 5);
	printf("a 的值为 %d ,b 的值为 %d
", a, b);
	(a = 1) || (b = 5);
	printf("a 的值为 %d, b 的值为 %d
", a, b);
	return 0;
}

运行结果

技术分享图片

逻辑与运算进行短路求值时:

先对 && 左边的表达式进行运算,如果左边运算的结果不等于 0 的话,将对 && 右边的表达式进行运算

如果 && 左边运算的结果等于 0 的话,就不对右边的表达式进行运算

逻辑或运算进行短路求值时:

无论 || 左边的表达式的值是否为 0,都会对 || 右边的表达式进行求值

以上是关于C 语言 - 逻辑运算和短路求值的主要内容,如果未能解决你的问题,请参考以下文章

1+2+...+n

C语言表达式求值

C++大纲及疑惑点一

C++大纲及疑惑点一

C++大纲及疑惑点一

go语言学习十二 - 布尔表达式采用短路逻辑