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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄莉萍 中级黑马   /  2014-6-5 19:52  /  2199 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄莉萍 于 2014-6-5 22:06 编辑

int x = 1,y = 1;
if(x++==2 && (++y==2 || ++x >3 )) {
    x =7;
}
printf("x=%d, y=%d\n", x, y);

刚做这题时我的答案是x=2,y=2,看了答案却是x=2,y=1,为什么y的值是1呀,按运算顺序不是应该先算括号里面的吗?

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

9 个回复

倒序浏览
因为x不等于2  后面的就不用算了  不会走的
回复 使用道具 举报
求大神,看晕了
回复 使用道具 举报 0 1
夏沫的黄昏′ 发表于 2014-6-5 20:11
因为x不等于2  后面的就不用算了  不会走的

不是该先算小括号里面的嘛?
回复 使用道具 举报
本帖最后由 张家伟2014 于 2014-6-7 21:02 编辑

首先复习两个知识点:
一、逻辑与
格式:条件A && 条件B
运行过程:
总是先判断条件A是否成立,
如果条件A成立,接着会再判断条件B是否成立,如果条件B成立,结果为1,即真。如果条件B不成立,结果为0,即假。
如果条件A不成立,不会再判断条件B是否成立,因为无论条件B如何,结果都为0,即假。
二、x++的运算过程:
先将x的值拷贝出来一份,然后对x执行+1操作,最后将拷贝出来的值返回。
下面来对号入座:
  1. x++ == 2 && (++y == 2 || ++x > 3)
复制代码
条件A:x++ == 2
条件B:(++y == 2 || ++x > 3)
运算过程:
先判断条件A是否成立,根据运算符优先级,可知首先进行运算的是x++,先将x的值拷贝出来一份(拷贝出来的值为1),然后对x执行+1操作(此时x的值为2),最后将拷贝出来的值返回,即1 == 2,为假,如果条件A不成立,不会再判断条件B是否成立,所以y没有进行任何操作,值为初值。

评分

参与人数 1技术分 +2 收起 理由
傘が咲く + 2 灰常详细!

查看全部评分

回复 使用道具 举报 1 0
张家伟2014 发表于 2014-6-5 21:22
复习两个知识点:一)逻辑与格式:条件A && 条件B
运行过程:总是先判断条件A是否成立。如果条件A成立,接 ...

谢谢,明白了
回复 使用道具 举报
黄莉萍 发表于 2014-6-5 20:46
不是该先算小括号里面的嘛?

判断语句的话 是从左向右运算的
回复 使用道具 举报
谢谢哈,现在弄清楚了,问题出在逻辑与和逻辑或关系运算上,逻辑与的优先级大于逻辑或,而逻辑或是一个整体,所有先判断x++==2,而这条件不成立就不进行后面的判断了。。
回复 使用道具 举报
亲们,把我弄迷糊了。
x+=2——>x=x+2,这个我知道。
但是,x++=2,这个怎么转化我还是不知道。请指教
回复 使用道具 举报
学习了。。。。嘿嘿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马