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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zmttt 中级黑马   /  2015-12-4 10:04  /  1201 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);

10 个回复

正序浏览
新手来学习顶下
回复 使用道具 举报
|和&和^间的优先级顺序是&>^>|,所以(b1 | b2 & b3 ^ b4)的计算就变为先计算b2&b3,结果为true,再计算true^b4,结果为false,最后计算b1|false,其结果为true。所以执行y=x++;   而++在后面,因此先将x赋值给y,y就=0,x再自增,就变成1了。
回复 使用道具 举报
y=(b1 | b2 & b3 ^ b4)?x++ : --x;
位运算符优先级& >^ >|
所以三元运算符左边为b2 & b3=true^b4=false|b1=true
y=x++;//x先赋值给y,然后自增
即y=0,x=1
回复 使用道具 举报
sun4w 中级黑马 2015-12-4 20:51:04
8#
  这几个运算符的优先级 应该不一样吧??

异或先执行,所以最后的结果是true
回复 使用道具 举报
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;
回复 使用道具 举报
x++  是自增后的 . 同时你的b3 ^b4最后就是本身 条件式满足执行 x++  ,y 没有执行所以是0
回复 使用道具 举报
在二目运算中&优先^优先|,所以y=(b1 | b2 & b3 ^ b4)为true
三目运算d1?d2:d3 d1为true时表达式值为d2否则为d3,  
回复 使用道具 举报
看不到,你重新上传下图片,或者手工输入下
回复 使用道具 举报
能看见吗?
回复 使用道具 举报
请上传图片
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马