一个奇怪的结果?怎么解释这段代码

HZ1918 2007-04-04 05:15:45

int x = 1984;
int y = 2001;
x ^= y ^= x ^= y;
System.out.println("x = " + x + "; y = " + y);
...全文
756 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjwns 2007-04-05
  • 打赏
  • 举报
回复
输出的结果是x=0,y=1984 ,想不通?
fengniumaxi 2007-04-05
  • 打赏
  • 举报
回复
x=x^y;
y=x^y;
x=x^y;

x=x^y^x^y;
y=x^y^y;
所以最后运算结果是x=0,y=x(这的x是初始x值)=1984
一句话 这个运算是从右向左的
HZ1918 2007-04-05
  • 打赏
  • 举报
回复
x^=y^=x^=y;
这个在c和java中表现不是一样的
malligator 2007-04-05
  • 打赏
  • 举报
回复
x ^= y;
y ^= x;
x ^= y;
迷眼流金 2007-04-05
  • 打赏
  • 举报
回复
这样写……
Happybolin1030 2007-04-05
  • 打赏
  • 举报
回复
先将x,y转化为二进制数,然后从x ^= y ^= x ^= y从右向左依次按0^0 = 0
0^1 = 1,1^1 = 0,1^0 = 1公式进行计算,最后的到x=0,y=1984的结果
pcno1 2007-04-05
  • 打赏
  • 举报
回复
学习
Summmmer 2007-04-05
  • 打赏
  • 举报
回复
这种代码没有一丝一毫的好处,可读性极差,有什么意义呢???走火入魔了。。。
李黄河 2007-04-05
  • 打赏
  • 举报
回复
#include <stdio.h>
main()
{
int x = 255;
int y = 0;
x^=y^=x^=y;
printf("x=%d,y=%d\n",x,y);
}
-------------
测度正确。
李黄河 2007-04-05
  • 打赏
  • 举报
回复
int x = 1984;
int y = 2001;
x ^= y ^= x ^= y;
System.out.println("x = " + x + "; y = " + y);
------------------------------------
a=x^y;
b=y^a;
c=a^b;
代入:
y=y^x^y=x;
x=x^y^y^x^y=y;
------------------------------------
结论:互换x,y;
For_suzhen 2007-04-04
  • 打赏
  • 举报
回复
看了一下,应该是2楼说得异或.相同的都为0
0^0 = 0
0^1 = 1
1^1 = 0
1^0 = 1
For_suzhen 2007-04-04
  • 打赏
  • 举报
回复
逻辑或,非0即1
=================
非0即1?那是肯定的了
=========================
学习学习
lixiaoxue85 2007-04-04
  • 打赏
  • 举报
回复
x ^= y ^= x ^= y;
逻辑或,非0即1
HZ1918 2007-04-04
  • 打赏
  • 举报
回复
这个不是c语言是java板块的,你怎么把这些搞到的?
binny 2007-04-04
  • 打赏
  • 举报
回复
Code:
0: sipush 1984
3: istore_1
4: sipush 2001
7: istore_2
8: iload_1
9: iload_2
10: iload_1
11: iload_2
12: ixor
13: dup
14: istore_1
15: ixor
16: dup
17: istore_2
18: ixor
19: istore_1
HZ1918 2007-04-04
  • 打赏
  • 举报
回复
不要误导

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

《=/=》

x^=y^=x^=y;
「已注销」 2007-04-04
  • 打赏
  • 举报
回复
x=x^y;
y=x^y;
x=x^y;

VS

x^=y^=x^=y;
HZ1918 2007-04-04
  • 打赏
  • 举报
回复
哦知道了,首先后面的y=x,然后x=x^y,其实就是x=x^x
HZ1918 2007-04-04
  • 打赏
  • 举报
回复
x ^= y ^= x ^= y;--> x = x ^ (y = y ^ (x = x ^ y));
x为什么为0?
HZ1918 2007-04-04
  • 打赏
  • 举报
回复
蛮厉害的
加载更多回复(6)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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