//不用第三方变量。
//11 = 3 + 8;
//3 = 11 - 8;
//8 = 11 - 3;
/*
n = n + m;//如果n和m的值非常大,容易超出int范围。
m = n - m;
n = n - m;
这个方法从第一步开始n就是11了。第二步 第三步等式右边的n都是11也就是n+m
异或方法:
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m)
异或方法这里第一步 第二步都没话说。而第三步等式右边的n对应n m对应n^m
第三步为什么n又变回原来的n了呢?而不是像上面一种方法那样依然是第一步那个n=n^m呢?
n = n ^ m;
m = n ^ m;//(n^m)^m; //此时,m的值为n
n = n ^ m;//n ^ (n ^ m) //此时,该运算表达式即为n=n^m^n;就像小学学的交换律a*b=b*a一样,^也具有这样的特性:n^m=m^n,n=n^m^n因此通过位置的置换就出现了楼主看到的n ^ (n ^ m) ,这样做只是为了看起来清晰明了,n仍是以第一步所赋的值在参与运算。