[讨论]交换程序的一点想法。。
在以前的写C的时候经常用到三种交换算法:
第一种:(也是最基本的一种,就是临时变量法)
第二种: x=x+y;
y=x-y;
x=x-y;
第三种:这种只能在C或者C++种行,JAVA中行不通。就是通过异或操作符号,并且这种交换算法速度最快。
异或操作符:^ 有一条性质:x^y^x=y;根据这条性质,我们可以改变交换一下两个数的值。
x=x^y;
y=y^x;
x=y^x;
这样x,y其不是交换了哈哈。下面的小程序演示了一下这个交换问题哈哈。
public class CleverSwap{
public static void main(String[ ] args){
int x = 10;
int y= 15;
x ^ = y ^ = x ^ = y // (1)
System.out.println("x"+"="+x+"y"+"="+y);
}
}
上面的小程序的结果是x=0,y=10;结果不是预期的,哎。我郁闷。。。。这说明在JAVA中这种方法不行。。因为JAVA中在计算x^=y时,是先提取出了x的值。
JAVA中为了实现上面的表达式(1),是这样实现的:
int temp1 = x;
int temp2=y;
int temp3=x^y
int x=temp3;
int y=temp2*temp3;
int x=temp1^y;
呵呵,现在终于知道结果为什么是这样了哈哈。如果JAVA中不规定表达式的计算顺序的话,此方法也可以在JAVA中用了哈哈。