黑马程序员技术交流社区
标题:
x--==1&&y++==1||z++==1
[打印本页]
作者:
希筱诺
时间:
2014-9-15 14:06
标题:
x--==1&&y++==1||z++==1
本帖最后由 希筱诺 于 2014-9-16 02:10 编辑
按大家的解释我懂,但是我还是有疑问,就是运算不是要按优先级吗,&&和||排后面,不是应该先算再比较最后逻辑判断吗?求真正原因???????
作者:
ifinver
时间:
2014-9-15 14:06
是应该先算再比较最后判断。
但是这里,后++和后--的意思是执行完当前一条语句后,再自增自减。所以对第一个(x--==1),是先执行x==1,后执行x+=1;这里如果写(++x==1),就是先执行x+=1,后执行x==1。
所以按你的要求应该写作(++x==1&&++y==1||++z==1)或者((x+=1)==1&&(y+=1)==1||(z+=1)==1)
至于为什么是这样,++、--设计的初衷,是基于以下的情况考虑:
一、
语句1:定义变量x;
语句2:对x进行操作;
语句3;x+=1或者x-=1
二、
语句1:定义变量x;
语句2:x+=1或者x-=1;
语句3:对x进行操作;
为了优化以上两种情况,就设计了++,--运算符,所以他并不是计算,而应该把它拆成两条语句理解。这样理解的话,下面的几种就不会混了:
++x--==5;
a+++b;
a+++--b;
作者:
ooEye
时间:
2014-9-15 15:01
本帖最后由 ooEye 于 2014-9-15 16:06 编辑
对于&&和||这两个预算符而言,并不是两边的表达式一定会运算,例如:A&&B,如果表达式A为false,那么A&&B就是false,而B表达式是不会运行的;对于C||D,如果C为true,那么C||D为true,D不运算;此外,对于这种复合表达式,要理清楚是否是右结合的
另外,你的x y z 表示的整数变量吧,在java中是不可以的,这一点与C/C++ 不同,上面例子中的A/B/C/D结果只能是boolean类型的
作者:
ifinver
时间:
2014-9-15 15:28
ifinver 发表于 2014-9-15 15:18
是应该先算再比较最后判断。
但是这里,后++和后--的意思是执行完当前一条语句后,再自增自减。所以对第一 ...
哦对了 还有2楼所说的短路求值问题,逻辑运算语句左边得出真值时,后边的逻辑运算就跳过了。
作者:
Tony丶Just
时间:
2014-9-19 09:14
终于找到点能看懂的知识点了~
作者:
未来就在那
时间:
2014-10-23 12:54
这个可以看懂
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2