A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© goobag 中级黑马   /  2014-4-29 20:54  /  1721 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

例如:


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.

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

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

       
        这样的情况就是逻辑短路


2 个回复

倒序浏览
嗯,是啊
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马