借助中间变量,可以很方便的交换两个变量的值。如果不借助中间变量,同样可以达到交换变量的目的。
数值相加减进行交换
int a = 10;
int b = 12;
a = b - a; //a = 2, b = 12
b = b - a; //a = 2, b = 10
a = b + a; //a = 12,b = 10
这种方法的原理是,把a和b看做数轴上的点,围绕两点间的距离进行计算。
具体过程:
- a = b - a计算出了a和b两点之间的距离,并将其保存在a中。
- b = b - a计算出了a到原点的距离,并将其保存在b中。
- a = b + a计算出了b到原点的距离,并将其保存在a中。
这种方法的缺点在于只能用于数字类型,字符串类型不可以。而且a+b可能超出int的范围。
位移运算进行交换
int a = 10;
int b = 12; //a=1010^b=1100;
a = a ^ b; //a=0110^b=1100;
b = a ^ b; //a=0110^b=1010;
a = a ^ b; //a=1100=12;b=1010;
这种方法,原理在于异或运算的特点,通过异或运算能够使得数据中的某些位翻转,其他位不变。
这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。