日期:2014-05-20  浏览次数:20671 次

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

int   x   =   1984;
int   y   =   2001;
x   ^=   y   ^=   x   ^=   y;
System.out.println( "x   =   "   +   x   +   ";   y   =   "   +   y);

------解决方案--------------------
x ^= y ^= x ^= y;--> x = x ^ (y = y ^ (x = x ^ y));
//--------------------
^是异或地意思,一一比对二进制位,不同为1,否则为0

------解决方案--------------------
楼上正点。。
------解决方案--------------------
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
------解决方案--------------------
x ^= y ^= x ^= y;
逻辑或,非0即1
------解决方案--------------------
逻辑或,非0即1
=================
非0即1?那是肯定的了
=========================
学习学习
------解决方案--------------------
看了一下,应该是2楼说得异或.相同的都为0
0^0 = 0
0^1 = 1
1^1 = 0
1^0 = 1
------解决方案--------------------
输出的结果是x=0,y=1984 ,想不通?

------解决方案--------------------
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;

------解决方案--------------------
#include <stdio.h>
main()
{
int x = 255;
int y = 0;
x^=y^=x^=y;
printf( "x=%d,y=%d\n ",x,y);
}
-------------
测度正确。
------解决方案--------------------
这种代码没有一丝一毫的好处,可读性极差,有什么意义呢???走火入魔了。。。