黑马程序员技术交流社区

标题: &&和|| [打印本页]

作者: sl7s78s8    时间: 2014-7-24 21:44
标题: &&和||
本帖最后由 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,的结果?
作者: fantacyleo    时间: 2014-7-24 22:12
又是这个经典问题。答案是:运算符的优先级和求值顺序没有任何关系,只决定表达式如何加括号(http://bbs.itheima.com/thread-128465-1-1.html)。因此,&&优先级高仅仅意味着表达式被变换为:++x || (++y && ++z); 而||的运算顺序是C标准规定的,必须是从左到右,左边为真就不再计算右边。此题||的左边++x为1,真,因此右边不再计算
作者: sl7s78s8    时间: 2014-7-25 20:36
fantacyleo 发表于 2014-7-24 22:12
又是这个经典问题。答案是:运算符的优先级和求值顺序没有任何关系,只决定表达式如何加括号(http://bbs.i ...

谢了。

作者: 黄莉萍    时间: 2014-7-25 21:22
学习了。。
作者: 心之信子    时间: 2014-7-25 21:59
明白了 谢谢分享




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