黑马程序员技术交流社区

标题: 逻辑短路问题 [打印本页]

作者: goobag    时间: 2014-4-29 20:54
标题: 逻辑短路问题

||和&&是我们经常用到的逻辑运算符虽然简单,但容易犯错。

例如:


int i=0;
int j=0;
if((++i>0)||(++j>0))
{
        //if里的处理语句
}
printf("i=%d;j=%d\n",i,j);

结果:i=1;j=0。

逻辑运算符||两边的条件只要有一个为真,其结果就为真;只有两个结果都为假,其结果才为假。if((++i>0)||(++j>0))语句中,先计算(++i>0),发现其结果为真,则判断语句为真,后面的(++j>0)便不再计算。所以只进行了++i,则i等于1,j等于0.


int i=-1;
int j=-1;
if((++i>0) && (++j>0))
{
        //if里的处理语句
}
printf("i=%d;j=%d\n",i,j);

结果:i=0;j=-1。

逻辑运算符&&两边的条件只有两个都为真,其结果就为真;只要有一个结果为假,其结果就为假。if((++i>0)||(++j>0))语句中,先计算(++i>0),发现其结果为假,则判断语句为假。后面的(++j>0)便不再计算。所以只进行了++i,则i等于0,j等于-1.

        在逻辑 || 中由于前面一个语句为真,不管后面的语句是真还是假,整个语句都为真,所以后面的语句就不用执行了。

        在逻辑 && 中由于前面一个语句为假,不管后面的语句为真还是假,整个语句都为假,所以后面的语句也都不用执行了。

       
        这样的情况就是逻辑短路



作者: 世俗孤岛    时间: 2015-3-7 21:00
嗯,是啊
作者: baby14    时间: 2018-8-10 07:56
多谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2