黑马程序员技术交流社区
标题:
为什么答案是x=1,y=0?
[打印本页]
作者:
zmttt
时间:
2015-12-4 10:04
标题:
为什么答案是x=1,y=0?
本帖最后由 zmttt 于 2015-12-4 10:14 编辑
int x=0,y=0;boolean b1,b2,b3,b4;
b1=b2=b3=b4=true;
y=(b1 | b2 & b3 ^ b4)?x++ : --x;
System.out.println(x);
System.out.println(y);
作者:
sun4w
时间:
2015-12-4 10:05
请上传图片
作者:
zmttt
时间:
2015-12-4 10:06
能看见吗?
作者:
Yuto吕
时间:
2015-12-4 10:09
看不到,你重新上传下图片,或者手工输入下
作者:
断魂oo血狼
时间:
2015-12-4 11:51
在二目运算中&优先^优先|,所以y=(b1 | b2 & b3 ^ b4)为true
三目运算d1?d2:d3 d1为true时表达式值为d2否则为d3,
作者:
迷茫不堪的年纪
时间:
2015-12-4 12:14
x++ 是自增后的 . 同时你的b3 ^b4最后就是本身 条件式满足执行 x++ ,y 没有执行所以是0
作者:
jiangshicun007
时间:
2015-12-4 20:12
int x=0,y=0;boolean b1,b2,b3,b4;
b1=b2=b3=b4=true;
y=(b1 | b2 & b3 ^ b4)?x++ : --x;
System.out.println(x);
System.out.println(y);
b1 | b2=true;
b3 ^ b4=false;
y=true;
y=b1 | b2 & b3 ^ b4结果为false;
x=0;
所以x++=1;
--x=0;//x先由0变为1了
因为y=b1 | b2 & b3 ^ b4结果为false;
所以y=0;
所以输出结果x=1;y=0;
作者:
sun4w
时间:
2015-12-4 20:51
这几个运算符的优先级 应该不一样吧??
异或先执行,所以最后的结果是true
作者:
xinxiangchen
时间:
2015-12-4 22:46
y=(b1 | b2 & b3 ^ b4)?x++ : --x;
位运算符优先级& >^ >|
所以三元运算符左边为b2 & b3=true^b4=false|b1=true
y=x++;//x先赋值给y,然后自增
即y=0,x=1
作者:
ninety_奶挺
时间:
2015-12-4 22:52
|和&和^间的优先级顺序是&>^>|,所以(b1 | b2 & b3 ^ b4)的计算就变为先计算b2&b3,结果为true,再计算true^b4,结果为false,最后计算b1|false,其结果为true。所以执行y=x++; 而++在后面,因此先将x赋值给y,y就=0,x再自增,就变成1了。
作者:
金金金小天
时间:
2015-12-4 23:00
新手来学习顶下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2