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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

执行一下语句后,y的值是()

int x, y, z;
x = y = z =0;
++x ||++y && ++z;
A 0    B 1    C  2

答案是A,但是&&的优先级大于||的优先级啊,不是先计算++y吗??

17 个回复

正序浏览
这个是逻辑运算中的短路问题,当++x为1后就不会在计算++y 了
回复 使用道具 举报
当编译器自左往右扫描, 扫描到1时, 逻辑或,一边为真则表达式为真,后面表达式都不执行, SO y =0
回复 使用道具 举报
不明觉厉
回复 使用道具 举报
逻辑断路后面不执行
回复 使用道具 举报
高手很多啊
回复 使用道具 举报
支持一下!
回复 使用道具 举报
看了也不会
回复 使用道具 举报
toveyloves 来自手机 中级黑马 2015-11-2 00:33:24
10#
hi丶bo 发表于 2015-11-1 16:33
  y不自增,y  才自增,所以答案是A

++y不自增?大兄弟弄反了吧?
回复 使用道具 举报
看似简单却是很难理解,逻辑运算符也需要掌握
回复 使用道具 举报
wwf707542865 发表于 2015-11-1 17:02
同学,逻辑短路,这里有点野蛮,应该与编译器底层的实现有关,就别较真了,虽然&&优先级高,但是编译器在编译的时 ...

谢谢~~~解决了
回复 使用道具 举报
大家讲的都好详细啊,学习啦
回复 使用道具 举报
可以看成 ++x ||(++y && ++z);
++X等于1,电脑执行逻辑或,前面的是真,逻辑或后面的不再执行,
不用纠结为什么   这么记就可以了
回复 使用道具 举报
不是,逻辑表达式是从左到右求值的。所以该式子可以看成是:(++x ||++y)&& ++z    对于||运算,因为 x = 0, ++x = 1; 根据|| 运算的特性,因为 ++x 值为 1 ,所以整个表达式被认为是真,将不再计算 ++y 的值,直接计算 && 运算符右边表达式的值。所以,y 的值是0.
回复 使用道具 举报
hi丶bo 发表于 2015-11-1 16:33
++y不自增,y++才自增,所以答案是A

哦++++++++++
回复 使用道具 举报
同学,逻辑短路,这里有点野蛮,应该与编译器底层的实现有关,就别较真了,虽然&&优先级高,但是编译器在编译的时候已经知道++x为真了,所以在运行的时候后面的运算它就忽视掉了
回复 使用道具 举报
++y不自增,y++才自增,所以答案是A   

点评

谁告诉你y++不自增的,你这样回答你老师知道嘛,这里是逻辑短路,因为++x已经为真了,所以后面的都不需要参与运算了,因此Y的值不变  发表于 2015-11-1 16:59
回复 使用道具 举报 0 1
您需要登录后才可以回帖 登录 | 加入黑马