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,没自减。
还有很多类似的例子。
以上就是逻辑运算中的优化现象,在进行逻辑表达式求解,或者在定义选择、循环结构语句的控制条件时,要对可能存在的优化现象引起注意。
【本文是作者的第一篇博客,喜欢请点赞,文中若有错误,请私信作者】ʘᴗʘ
来源:CSDN
作者:Clancey P.M.R.S. Yu
链接:https://blog.csdn.net/qq_45695653/article/details/104246843