编程小站



和我一起走进编程的世界

1.8 逻辑的短路

先让我们来看一段代码:

int a = 0;
int b = 0;
if(a++&&b++){
   printf("True");
}
 printf("a:%d,b:%d",a,b);

运行上述代码,我们得到的结果是

a:1 b:0

这是为什么呢?让我们来观看一下这段伪代码,并思考这样一个问题:

if(A&&B){
    //我们该怎么判断A&&B的真假呢?
    //当我们已经知道A为假时,还需要判断B的真假吗?
    //那么,如果B是个表达式,我们还需要执行吗?
}

很好,看来你已经有了思路。

也就是说,当”与“运算中,首先判断的值为假时,另外一个变量/表达式,就无需执行和判断了。

那么,现在做一个小练习:


逻辑的短路-附录1

int a = 0;
int b = 0;
if(++a&&b++){
   printf("True");
}
 printf("a:%d,b:%d",a,b);

求输出的值。


逻辑的短路-附录2

int a = 0;
int b = 0;
if(a++||b++){
   printf("True");
}
 printf("a:%d,b:%d",a,b);

求输出的值。


利用这个特性,我们还能对我们的代码进行一些优化。

if(i!=0){
	printf("lalala");
}

上面是一段很简单的代码,它的作用是,当i不等于0时,输出”lalala“

因为if语句的运行速度较慢,所以我们可以对它进行优化。

还记得我刚刚说过的逻辑短路吗?

当&&前的条件为真,则会进行后面的语句,

当&&前的条件为假,则会跳过后面的语句。

所以,上面的代码可以简化为:

i&&printf("lalala");

这段代码,

当i等于0时,由于逻辑短路,跳过后面的输出语句

当i不等于0时,则进行后面的语句。

最近的文章

1.9 函数、递归与递推

函数相关知识点…

继续阅读
更早的文章

1.7 逻辑运算符

在学习过了if、while等语句之后我们接触到了”判断条件“这一概念现在我们需要介绍一些逻辑运算符以便简化一些表达举个例子:如果没有逻辑运算符你想要判断你的室友是不是既得了神经病又得了精神病你只能intdis=0;if(室友是神经病)dis=dis+1;if(室友是精神病)dis=dis+2;if(…

继续阅读