黑马程序员技术交流社区

标题: 谁帮我分析一下 [打印本页]

作者: 15098037606    时间: 2015-4-16 17:27
标题: 谁帮我分析一下
本帖最后由 15098037606 于 2015-4-16 18:04 编辑

1>        第一题
int x = 1,y = 1;

if(x++==2 && ++y==2)
{
    x =7;
}

printf("x=%d, y=%d\n", x, y);

输出是x=2, y=1

2>        第二题
int x = 1,y = 1;

if(x++==2 || ++y==2) {
    x =7;
}
printf("x=%d, y=%d\n", x, y);

输出是x=7, y=2

3>第三题

int x = 1,y = 1;

if(x++==2 & ++y==2)
{
            x =7;
        }
printf("x=%d, y=%d\n", x, y);

输出是x=2, y=2
第三题我理解对了,第一二题我理解错了,谁帮我分析一下?


作者: 15098037606    时间: 2015-4-16 17:39
sunyang 发表于 2015-4-16 17:32
题目2 ||只要满足一个条件就认为满足条件,y=2,所以会执行括号里面的.

——————————————— ...

第一题为什么输出y是1不是2呢?
作者: 15098037606    时间: 2015-4-16 17:45
sunyang 发表于 2015-4-16 17:40
第一题&&后面的语句不执行,判断条件一不满足之后,条件二就会跳过,这是为了执行效率进行的编译优化 ...

比较一下,第一题和第三题的区别。一个&和两个&的区别?
作者: 15098037606    时间: 2015-4-16 18:05
sunyang 发表于 2015-4-16 17:54
是的,只有两个& 的运算符的时候才具有”短路“功能

按你说的方法,帖子改为已解决。




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