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