黑马程序员技术交流社区

标题: 请问这里为什么y值为0,而不是1 [打印本页]

作者: peide0427    时间: 2015-11-1 15:38
标题: 请问这里为什么y值为0,而不是1
执行一下语句后,y的值是()

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

答案是A,但是&&的优先级大于||的优先级啊,不是先计算++y吗??
作者: hi丶bo    时间: 2015-11-1 16:33
++y不自增,y++才自增,所以答案是A   
作者: wwf707542865    时间: 2015-11-1 17:02
同学,逻辑短路,这里有点野蛮,应该与编译器底层的实现有关,就别较真了,虽然&&优先级高,但是编译器在编译的时候已经知道++x为真了,所以在运行的时候后面的运算它就忽视掉了
作者: hi丶bo    时间: 2015-11-1 17:03
hi丶bo 发表于 2015-11-1 16:33
++y不自增,y++才自增,所以答案是A

哦++++++++++
作者: 雷厉风行    时间: 2015-11-1 17:03
不是,逻辑表达式是从左到右求值的。所以该式子可以看成是:(++x ||++y)&& ++z    对于||运算,因为 x = 0, ++x = 1; 根据|| 运算的特性,因为 ++x 值为 1 ,所以整个表达式被认为是真,将不再计算 ++y 的值,直接计算 && 运算符右边表达式的值。所以,y 的值是0.
作者: craneteng    时间: 2015-11-1 17:19
可以看成 ++x ||(++y && ++z);
++X等于1,电脑执行逻辑或,前面的是真,逻辑或后面的不再执行,
不用纠结为什么   这么记就可以了
作者: xiaobei    时间: 2015-11-1 19:06
大家讲的都好详细啊,学习啦
作者: peide0427    时间: 2015-11-1 20:10
wwf707542865 发表于 2015-11-1 17:02
同学,逻辑短路,这里有点野蛮,应该与编译器底层的实现有关,就别较真了,虽然&&优先级高,但是编译器在编译的时 ...

谢谢~~~解决了
作者: jeffdy66    时间: 2015-11-2 00:05
看似简单却是很难理解,逻辑运算符也需要掌握
作者: toveyloves    时间: 2015-11-2 00:33
hi丶bo 发表于 2015-11-1 16:33
  y不自增,y  才自增,所以答案是A

++y不自增?大兄弟弄反了吧?
作者: Tiffany2015    时间: 2015-11-2 00:36
看了也不会
作者: gabriel2016    时间: 2015-11-2 00:45
支持一下!
作者: zzzzll2222    时间: 2015-11-2 22:41
高手很多啊
作者: 陌忆    时间: 2015-11-3 19:06
逻辑断路后面不执行
作者: amoshaxiangp    时间: 2015-11-3 21:19
不明觉厉
作者: jeffdy66    时间: 2015-11-4 00:34
当编译器自左往右扫描, 扫描到1时, 逻辑或,一边为真则表达式为真,后面表达式都不执行, SO y =0
作者: liruixue    时间: 2015-11-4 10:32
这个是逻辑运算中的短路问题,当++x为1后就不会在计算++y 了




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