一个奇怪的结果?怎么解释这段代码
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);
}
-------------
测度正确。
------解决方案--------------------这种代码没有一丝一毫的好处,可读性极差,有什么意义呢???走火入魔了。。。