正好有空,分析一下之前看到过的整数交换的最高效的方式,打算以后一直采用这种方式了。经验证,负数也是没问题的,可以放心使用。
原理:异或操作可以得到两个数间的差异信息,两个数各自结合差异信息即可得到对方的值。
/**
* Created by Json Wan on 2017/10/7.
* Description:异或操作可以得到a,b间的差异信息,a,b各自结合差异信息即可得到对方的值
*/
public class TestExchange {
public static void main(String[] args) {
int a=2017,b=9999,diff;
System.out.println("原始:a="+a+";b="+b);
//实现交换
a=a^b;
b=b^a;
a=a^b;
System.out.println("a="+a+";b="+b);
//分析原理
diff=a^b;
b=b^diff;
a=diff^a;
System.out.println("a="+a+";b="+b);
//验证交换律
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a+";b="+b);
diff=a^b;
b=b^diff;
a=a^diff;
System.out.println("a="+a+";b="+b);
//验证对称性
b=a^b;
a=a^b;
b=a^b;
System.out.println("a="+a+";b="+b);
//验证负数
a=-9999;b=2017;
System.out.println("原始:a="+a+";b="+b);
b=a^b;
a=a^b;
b=a^b;
System.out.println("a="+a+";b="+b);
a=-9999;b=-2017;
System.out.println("原始:a="+a+";b="+b);
b=a^b;
a=a^b;
b=a^b;
System.out.println("a="+a+";b="+b);
}
}
结果如下: