3种交换值的方法
02 April 2013
交换值是比较常用的步骤,也比较简单,这里总结了3个方法。
交换值是比较常用的步骤,也比较简单,这里总结了3个方法:
-
使用临时变量交换。方法很简单,使用临时变量来保存一个值,该值被保存后就可以对其进行赋值操作了;
// 通过临时变量交换值 void swap_temp(int *a, int *b) { // a = 1, b = 3 int temp = *a; // temp = 1 *a = *b; // a = 3 *b = temp; // b = 1 }
-
使用异或操作(可参考《位运算符》)。具体原理是:对于任何数,都有A^0=A A^A=0;
// 通过位运算交换值 void swap_bit(int *a, int *b) { // a = 1, b = 3 *a = *a ^ *b; // a = a ^ b *b = *b ^ *a; // b = b ^ a = b ^ (a ^ b) = a = 1 *a = *a ^ *b; // a = a ^ b = (a ^ b) ^ a = b = 3 }
-
使用加法和减法也可以实现数字的交换,原理同第二条异或原理基本一致;
void swap_add_substract(int *a, int *b) { // a = 1, b = 3 *a = *a + *b; // a = a + b *b = *a - *b; // b = a - b = (a + b) - b = a = 1 *a = *a - *b; // a = a - b = (a + b) - a = b = 3 }
虽然使用异或操作和加减法运算并没有去声明临时变量,但实际运行过程中,会在临时寄存器中保存临时变量用于计算,所以都是将一个数值保存在了一个临时的场所,只是位置不同而已。
我大Golang在语言级别支持了多重赋值,所以值的交换异常简单a, b = b, a
。
原文链接:3种交换值的方法,转载请注明来源!
–EOF–