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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 烛风小糊涂 中级黑马   /  2016-3-20 21:31  /  1037 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本人现在正自学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的值?谢谢!

4 个回复

倒序浏览
本帖最后由 泥娃娃 于 2016-3-21 09:29 编辑

i++,先看到变量,表达式的值就是变量的值;++i先看到加号,表达式的值是加完后的值。结果不一样,是因为后者出现逻辑与短路了。
回复 使用道具 举报
我刚学了这个额,
我算的
第一个( 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
回复 使用道具 举报
第一个:1 1 1 1  第二个:1 0 0 1
原因:考点有两个,一个是优先级,第二个是逻辑运算符的短路问题;
1.当自增自减符号与逻辑运算符混合使用时,忽略优先级,从左往右计算,故而第一题和第二题都是从左往右计算;
2.当逻辑运算符已经能确定运算结果时,直接返回结果,不会往后继续运算,结合上楼所说得到结果;
回复 使用道具 举报
i++ = i     ++i = i+1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马