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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sl7s78s8 中级黑马   /  2014-7-24 21:44  /  1083 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sl7s78s8 于 2014-7-25 20:52 编辑

int x,y,z;
x=y=z=0;
++x || ++y && ++z;
printf("%d,%d,%d",x,y,z);
结果是1,0,0;不是应该先算&&吗,再算||得到1,1,1,的结果?

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

4 个回复

倒序浏览
又是这个经典问题。答案是:运算符的优先级和求值顺序没有任何关系,只决定表达式如何加括号(http://bbs.itheima.com/thread-128465-1-1.html)。因此,&&优先级高仅仅意味着表达式被变换为:++x || (++y && ++z); 而||的运算顺序是C标准规定的,必须是从左到右,左边为真就不再计算右边。此题||的左边++x为1,真,因此右边不再计算

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2014-7-24 22:12
又是这个经典问题。答案是:运算符的优先级和求值顺序没有任何关系,只决定表达式如何加括号(http://bbs.i ...

谢了。
回复 使用道具 举报
学习了。。
回复 使用道具 举报
明白了 谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马