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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Chasel 中级黑马   /  2015-6-17 09:51  /  1475 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int main(int argc, const char * argv[]) {
   
    int x,y,z;
    x=y=z=0;
   
    int RESULT= (++x) || ++y && z++;
    printf("RESULT = %d\n",RESULT);
    printf("x = %d,y = %d,z = %d",x,y,z);
    return 0;
      
}

14 个回复

倒序浏览
++x为1则不执行 || 后面的。
回复 使用道具 举报
逻辑运算符运算顺序从左向右执行,先执行++x,x结果为1,逻辑或“||”运算符的一个特点就是如果左边的结果为true,则右边的表达式不计算,所以后面的就不计算了。
回复 使用道具 举报
bsx881220 发表于 2015-6-17 11:34
逻辑运算符运算顺序从左向右执行,先执行++x,x结果为1,逻辑或“||”运算符的一个特点就是如果左边的结果 ...

谢谢,知道了。原来是短路问题
回复 使用道具 举报
Elors 发表于 2015-6-17 11:02
++x为1则不执行 || 后面的。

恩,谢谢。
回复 使用道具 举报
c语言提升运算效率的体现..
回复 使用道具 举报
venn 中级黑马 2015-6-17 13:50:11
7#
这个是逻辑运算符的短路问题
在c语言中 如果 a  || b如果 a为真 则后面的表达式不予执行
                            a && b 如果a为假,则后面的表达式也不予执行
上面题目中 ++x 的值为 1 所以为真 后面的都不予执行 故x值自加1 yz 都值都不变
  所以 x=1,y=0,z=0;
回复 使用道具 举报
bsx881220 发表于 2015-6-17 11:34
逻辑运算符运算顺序从左向右执行,先执行++x,x结果为1,逻辑或“||”运算符的一个特点就是如果左边的结果 ...

正解。。。
回复 使用道具 举报
运算符优先级问题
回复 使用道具 举报
逻辑或短路问题,前面的为1|(真),后面的y,z。都不在参与运算。被短路了。
回复 使用道具 举报
这是一个或运算短路问题,计算机从上到下从左到右执行,++x表达式的值为1,得出RESULT为真不用再向右执行所以输出x=1,y=0,z=0; 如意大师的iOS基础视频第三天会讲到.谢谢!
回复 使用道具 举报
这是一个逻辑或的短路问题,||之前的值只要是真为1之后的就不做运算了!!!希望能帮到你
回复 使用道具 举报
刚讲完的短路 问题!
回复 使用道具 举报
aofex 中级黑马 2015-6-17 21:50:07
14#
我擦  都是大神啊
回复 使用道具 举报
.................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马