逻辑的短路
先让我们来看一段代码:
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时,则进行后面的语句。