C语言基础-逻辑运算优化

点点圈 提交于 2020-02-10 14:36:27

C语言中,当对一些逻辑表达式进行求解时,可能会出现逻辑运算的优化,也叫“逻辑运算短路”(这名字说实在的不好听¯_(ツ)_/¯)

所谓优化,是指求解逻辑表达式时,并非执行所有的运算符,而是当必须执行下一个运算符才能对表达式求解时,才执行该运算符。

逻辑运算的优化主要体现在**逻辑与【&&】和逻辑或【||】**中。

逻辑与运算优化

请看此程序:

#include <stdio.h>
int main()
{
	int x,y,a;
	x=y=a=0;
	a=x++ && y++;
	printf("a=%d,x=%d,y=%d\n",a,x,y);
	return 0;
}

注意看第六行,这里先对x进行逻辑与运算,再使x值自增一。逻辑与规定当&&两边的操作数都为真值时结果才为真。但这里x取0(++位于x后,所以在执行&&时,x值仍为0),所以无论y值是真是假,都 不能影响&&运算的结果(假值)。此时逻辑与运算已经出现了优化。**因为x++这一个式子就能确定整个表达式的值,y++就被gg掉了,没有被执行.**所以最终y的值还是0,没有自增一。
类似的例子有很多。
结果如下。

a=0,x=1,y=0

·逻辑或运算优化

请看这坨代码:

#include <stdio.h>
int main()
{
	int x,y,a;
	x=y=a=1;
	a=x--  ||y--;
	printf("a=%d,x=%d,y=%d\n",a,x,y);
	return 0;
}

还是第六行,这里对x进行逻辑或运算,随后x自减一。逻辑或规定,只要||两边操作数中只要有一个是真值,表达式结果就为真。这里的x取值是1(- -位于x后),所以y的取值已经不能影响整个表达式的结果了(真值),此时就出现了逻辑或运算的优化,y- -也被gg掉了,没被执行。最终y值仍原封不动的是1,没自减。
还有很多类似的例子。

以上就是逻辑运算中的优化现象,在进行逻辑表达式求解,或者在定义选择、循环结构语句的控制条件时,要对可能存在的优化现象引起注意。

【本文是作者的第一篇博客,喜欢请点赞,文中若有错误,请私信作者】ʘᴗʘ

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!