目的:实现两个变量值的交换(以int 类型为例)。
方法一:使用临时变量。
优点:安全,适合任何类型数据交换,无溢出风险。
缺点:保守、效率不高,需要使用第三方临时变量(栈空间)。
void swap_value( int *var1, int *var2)
{
int tmp = 0;
tmp = *var1;
*var1 = *var2;
*var2 = tmp;
}
方法二:利用+ - 算术运算实现。
优点:不需要额外的临时变量。
缺点:有溢出风险。
void swap_value( int *var1, int *var2)
{
*var1 = *var1 + *var2;
*var2 = *var1 - *var2;
*var1 = *var1 - *var2 ;
}
方法三:利用位运算(异或)实现。
异或:
0 ^ 1 = 1;
0 ^ 0 = 0;
1 ^ 0 = 1;
1 ^ 1 = 0;
A与B连续异或两次则 A = B.
优点:不需要额外的临时变量,位操作效率高。
缺点:浮点型数据(浮点型数据储存方式比较特殊)无法交换。
void swap_value( int *var1, int *var2)
{
*var1 ^= *var2;
*var2 ^= *var1;
*var1 ^= *var2 ;
}
2016-01-14 by tid at shenzhen futian
原文:http://www.cnblogs.com/tid-think/p/5132117.html