在对元素进行交换时,有一种方法如下所示,它的原理是什么?为什么可以这样做?
public class BooleanTest {
public static void main(String[] args)
{
int n = 3,m = 8;
System.out.println("n="+n+",m="+m);
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m)
System.out.println("n="+n+",m="+m);
}
}作者: 王峰230321 时间: 2013-7-22 19:13
那个 加法的 你能看懂吗. ?
int a=1 int b=2
a=a+b; b=a-b ; a=a-b;
其实就是异或的特点:一个数异或同一个数两次,结果还是这个数。 比如n^m^m=n,看不懂的话 勉强相当于 n+m-m=n.
{
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m)
}
这部分也就相当于
{
n = n ^m;// n=n+m
m = n ^ m;// m=(n+m)-m=n
n = n ^ m;// n=(n+m)-n=m
}