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); } ------------- 测度正确。
先将x,y转化为二进制数,然后从x ^= y ^= x ^= y从右向左依次按0^0 = 0 0^1 = 1,1^1 = 0,1^0 = 1公式进行计算,最后的到x=0,y=1984的结果
//--------------------
^是异或地意思,一一比对二进制位,不同为1,否则为0
x为什么为0?
y=x^y;
x=x^y;VSx^=y^=x^=y;
y=x^y;
x=x^y;《=/=》x^=y^=x^=y;
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
逻辑或,非0即1
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;
main()
{
int x = 255;
int y = 0;
x^=y^=x^=y;
printf("x=%d,y=%d\n",x,y);
}
-------------
测度正确。
0^1 = 1,1^1 = 0,1^0 = 1公式进行计算,最后的到x=0,y=1984的结果
y ^= x;
x ^= y;
这个在c和java中表现不是一样的
y=x^y;
x=x^y;x=x^y^x^y;
y=x^y^y;
所以最后运算结果是x=0,y=x(这的x是初始x值)=1984
一句话 这个运算是从右向左的