x^=y^=x^=y;

fengxuegupo 2011-02-24 03:44:53
这句话啥意思?
int x = 2010;
int y = 2012;
x^=y^=x^=y;
System.out.println("x= " + x + "; y= " + y);
就是x^=y^=x^=y;这句话,谢谢!
...全文
435 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
^ 按位异或(XOR) c = a ^ b
a^=b 与 a+=b 用法一样

x = 2010 (11111011010)
y = 2012 (11111011100)

X^=y^=x^=Y 等价于 X^=(y^=(x^=Y))

最后的x^=y 等价于 a = x = x^y = 11111011010 ^ 11111011100 = 00000000110
y^=(x^=y) 等价于 b = y = y^a = 11111011100 ^ 00000000110 = 11111011010 (2010)
x^=(y^=(x^=Y)) 等价于 c = x^b = 11111011010 ^ 11111011010 = 00000000000 (0)


x^=y^=x^=y;

最好不要这么做,理由见 Java Puzzlers

要显摆的话最好写成这样:

x ^= y;
y ^= x;
x ^= y;
mopishv0 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fengxuegupo 的回复:]

引用 9 楼 bao110908 的回复:
x^=y^=x^=y;

最好不要这么做,理由见 Java Puzzlers

要显摆的话最好写成这样:

x ^= y;
y ^= x;
x ^= y;

额~下面这个我知道,这个事x/y值呼唤,只不过上面那个结果不同,所以很诧异,在论坛上碰到的,感觉不会就问问了~
[/Quote]
这是JAVA解惑里的一节 里面做了详细的说明了 LZ可以去CSDN资源里找
fengxuegupo 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bao110908 的回复:]
x^=y^=x^=y;

最好不要这么做,理由见 Java Puzzlers

要显摆的话最好写成这样:

x ^= y;
y ^= x;
x ^= y;
[/Quote]
额~下面这个我知道,这个事x/y值呼唤,只不过上面那个结果不同,所以很诧异,在论坛上碰到的,感觉不会就问问了~
  • 打赏
  • 举报
回复
x^=y^=x^=y;

最好不要这么做,理由见 Java Puzzlers

要显摆的话最好写成这样:

x ^= y;
y ^= x;
x ^= y;
heardy 2011-02-24
  • 打赏
  • 举报
回复
int a= 10 ;
int b = 5;
a+=b+=a+=b;
System.out.println(a + " " + b);
fengxuegupo 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 heardy 的回复:]
x = 2010 (11111011010)
y = 2012 (11111011100)

X^=y^=x^=Y 等价于 X^=(y^=(x^=Y))

最后的x^=y 等价于 a = x = x^y = 11111011010 ^ 11111011100 = 00000000110
y^=(x^=y) 等价于 b = y = y^a = 11111011100 ^ 00000000……
[/Quote]
在第三步预算的时候x=11111011100,为什么x不等于第一步运算得到的00000000110呢?
heardy 2011-02-24
  • 打赏
  • 举报
回复
int是32位 真实的x应该是 00000000000000000000011111011010(前面应该要加21个零的)
yanebupt 2011-02-24
  • 打赏
  • 举报
回复
^ 是按位异或,a^=b 同a+=b的运算规则是一样的,相当于a=a^b,所以LZ的程序x的最终值实际为x=x^(y^(x^y)),y=y^(x^y)
heardy 2011-02-24
  • 打赏
  • 举报
回复
x = 2010 (11111011010)
y = 2012 (11111011100)

X^=y^=x^=Y 等价于 X^=(y^=(x^=Y))

最后的x^=y 等价于 a = x = x^y = 11111011010 ^ 11111011100 = 00000000110
y^=(x^=y) 等价于 b = y = y^a = 11111011100 ^ 00000000110 = 11111011010 (2010)
x^=(y^=(x^=Y)) 等价于 c = x^b = 11111011010 ^ 11111011010 = 00000000000 (0)
fengxuegupo 2011-02-24
  • 打赏
  • 举报
回复
楼上的说详细一些好么,这块我真不太懂~谢谢了
heardy 2011-02-24
  • 打赏
  • 举报
回复
^ 按位异或(XOR) c = a ^ b
a^=b 与 a+=b 用法一样
zhuming12345 2011-02-24
  • 打赏
  • 举报
回复
什么意思?????????

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧