黑马程序员技术交流社区
标题:
谁能解释一下if运算题目
[打印本页]
作者:
李勇
时间:
2012-6-14 09:57
标题:
谁能解释一下if运算题目
public class day1001 {
public static void main(String[] args) {
int x=0,y=1;
if((++x==y--)&(x++==1||--y==0))
System.out.println("x="+x+",y="+y);//x=2,y=0
else
System.out.println("y="+y+",x="+x);
}
}
结果是 x=2 y=0
我想不通为什么y是0 减过两次了 为什么还会是0
作者:
李盼
时间:
2012-6-14 10:05
if((++x==y--)&(x++==1||--y==0))
++x 此时x为1.而y--是先计算,再自减1.所以此时y还是1,跟x相等,第一个表达式成立,之后y变为了0.
x++是先比较,此时x=1,和1相等,所以条件成立,然后x再自加1,x的结果就为2.
而||符号是只要前面那个条件满足,后面就不需要计算,所以--y==0这个表达式不计算,所以y还是0!
作者:
王晓新
时间:
2012-6-14 10:06
if((++x==y--)&(x++==1||--y==0))这条语句,后面一部分x++==1||--y==0,前面的x++的结果是为1,所以为true,后面的--y==0应该就不会判断了吧,我是这样理解的
作者:
王晓新
时间:
2012-6-14 10:06
if((++x==y--)&(x++==1||--y==0))这条语句,后面一部分x++==1||--y==0,前面的x++的结果是为1,所以为true,后面的--y==0应该就不会判断了吧,我是这样理解的
作者:
李盼
时间:
2012-6-14 10:07
如果你改为if((++x==y--)&(x++==1|--y==0))这样,那么y的最后结果就是y=-1了!
作者:
马林康
时间:
2012-6-14 10:11
分解一下++x==y--为真 x=1,y=0
x++==1 为真 x=2
|| 短路运算 如果前面为真后面的可以不进行计算 所以y仍然等于0
作者:
孙新强
时间:
2012-6-14 10:13
public class day1001 {
public static void main(String[] args) {
int x=0,y=1;
if((++x==y--)&(x++==1||--y==0))
System.out.println("x="+x+",y="+y);//x=2,y=0
else
System.out.println("y="+y+",x="+x);
}
}
在if((++x==y--)&(x++==1||--y==0))语句中 使用到了一些逻辑运算符 在逻辑运算符中&& ||与& | 使用是有区别的 & | 使用时两端的表达式都要进行判断执行 然而&& || 使用的时候 只要在左端能判断出来结果 有段就不再执行了 这就是 x=2,y=0的原因
作者:
张_涛
时间:
2012-6-14 10:14
“&&”、“||”为短路运算符,意思为:
1.“&&”运算符检查第一个表达式是否返回“false”,如果是“false”则结果必为“false”,不再检查其他内容。
2.“||”运算符检查第一个表达式是否返回“true”,如果是“true”则结果必为“true”,不再检查其他内容。
因此,回到你的程序进行观察:
当++x==y--做完之后,x为1,y为0,表达式结果为真;
当遇到x++==1 || --y==0,首先可以看到x++==1为先与1进行比较再加1,因此为真。当x++==1为真而运算符为||时,那么--y==0就不需要判断,所以y就没有再自减了。执行完之后,x为2,y依然为0,表达式结果为真;
此后,你用&位运算符,应该手误吧,当然,位运算最后值非0,那么if条件就为真,执行第一个输出语句x=2,y=0。
作者:
钟成军
时间:
2012-6-14 10:20
这是考查逻辑运算符|,&和||,&&的区别了。
运算符|和&在进行运算时,不管前面的是真是假,后面的都会进行运算。
而运算符||和&&在进行运算时,其中
||:只要前面一项为真,那么后面的表达式就不用运算了。
&&:只要前面的一项表达式为假,的面的也不用运算了。
int x=0,y=1;
if((++x==y--)&(x++==1||--y==0))
楼主这道题,++x先加1变为1,y也等于1,所以相等,即第一个一达式为真,因为是&运算,所以还得继续,而后y再减1变成0,这个表达式x++==1,是x先参与运算,所以x==1为真,因为是||运算,所以后面的不用再运算了,但x要自减1,最后x=2,y=0;
作者:
胡卿
时间:
2012-6-14 10:47
if((++x==y--)&(x++==1||--y==0))
&&运算必须两个都为真,结果才为真,++x是x先自增,所以x此时为1,y--是y先和++x比较,为真后,再自减为0
||运算是只要一个为真,结果就为真,后面的运算就不再进行,因为x++==1,是x先和1比较,为真后x自增为2,||运算就直接返回真,后面不在执行
所以此时的x=2,y=0
作者:
王明明
时间:
2012-6-14 12:52
这个 应该去了解i++ ++i的关系吧!一个是判断后+1 一个是判断前+1
作者:
党巾水
时间:
2012-6-14 13:07
问题
在于这句
if((++x==y--)&(x++==1||--y==0))
前半句
(++x==y--)
,里面==左右两边的式子++x和y--
都计算
了;
后半句
(x++==1||--y==0)
,里面
只计算
了++x==1,因为楼主用的是"||",不是"|",前者
左边为真则
停止计算
直接返回真。
所以最后x自增2次,y自减1次。
作者:
位雪
时间:
2012-6-14 13:29
查逻辑运算符|,&和||,&&的区别
“&&”、“||”为短路运算符,意思为:
“&&”运算符检查第一个表达式是否返回“false”,如果是“false”则结果必为“false”,右边表达式不参与运算
“||”运算符检查第一个表达式是否返回“true”,如果是“true”则结果必为“true”,右边表达式不参与运算
因此
++x先加1变为1,y也等于1,所以相等,即第一个一达式为真,因为是&运算,所以还得继续,而后y再减1变成0,这个表达式x++==1,是x先参与运算,所以x==1为真,因为是||运算,所以后面的不用再运算了,但x要自减1,最后x=2,y=0
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2