黑马程序员技术交流社区

标题: 关于自加的问题 [打印本页]

作者: 烛风小糊涂    时间: 2016-3-20 21:31
标题: 关于自加的问题
本人现在正自学C语言基础课程,到了自加这里有点疑惑,下面是代码:

#include<stdio.h>
main ()
{
         int x, y, z, result;
         x = y = z = 0;
         result = ++y&&z++|| ++x ;
         printf("x=%d,y=%d,z=%d,result=%d\n",x,y,z,result);
         return 0;
}

以及

#include<stdio.h>
main ()
{
         int x, y, z, result;
         x = y = z = 0;
         result = ++x || ++y&&z++;
         printf("x=%d,y=%d,z=%d,result=%d\n",x,y,z,result);
         return 0;
}

这两个程序中,最后打印出来的x,y,z值不一样。请问这种问题的计算顺序是怎样的,该怎么心算x,y,z的值?谢谢!
作者: 泥娃娃    时间: 2016-3-21 09:27
本帖最后由 泥娃娃 于 2016-3-21 09:29 编辑

i++,先看到变量,表达式的值就是变量的值;++i先看到加号,表达式的值是加完后的值。结果不一样,是因为后者出现逻辑与短路了。

作者: 15527933998    时间: 2016-3-21 11:37
我刚学了这个额,
我算的
第一个( result = ++y && z++ || ++x; 中 ++y 为真,执行 z++ 为假   ++y && z++为假 ,执行 ++x 为真   0 || ++x 为真    result=1)
x=1,y=1,z=1,result=1
第二个( result = ++x || ++y && z++; 中 ++x 是 1 为真 result = 1 后面的不执行)
x=1,y=0,z=0,result=1

作者: zxinsunshine    时间: 2016-4-2 23:06
第一个:1 1 1 1  第二个:1 0 0 1
原因:考点有两个,一个是优先级,第二个是逻辑运算符的短路问题;
1.当自增自减符号与逻辑运算符混合使用时,忽略优先级,从左往右计算,故而第一题和第二题都是从左往右计算;
2.当逻辑运算符已经能确定运算结果时,直接返回结果,不会往后继续运算,结合上楼所说得到结果;
作者: 最爱舒儿    时间: 2016-4-2 23:08
i++ = i     ++i = i+1




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