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.7 逻辑运算符

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

继续阅读
更早的文章

1.9 函数、递归与递推

函数的作用,一是为了减少代码量,二是为了便于调试。如果将所有代码的运行部分全部写在主函数中,那么调试的时候,只能一行一行调试然而如果封装了函数,可以只调试对应的函数。在编码中,能封装成函数,尽量封装成函数,这样会使你的思路更加清晰,逻辑更加简洁。返回值类型 函数名(形式参数类型 形式参数名){//可…

继续阅读