无参交换
#include "stdafx.h"
#if 0
void mySwap(int *px, int *py)
{
int t;
t = *px;
*px = *py;
*py = t;
}
void mySwap(int *px, int *py)
{
// int sum = *px + *py;
// *px = sum - *px;
// *py = sum - *py;
*px = *px + *py;
*py = *px - *py;
*px = *px - *py;
// 加法有些情况会溢出 例如俩个8位(bit)的数相加的值
//如果超过256(2的8次幂)就会溢出 导致结果出错
}
//交换的最高境界,无参且无溢出。
// x + y 己知其中之二,求第三者
// 5 3
// 3 2
// x ^ y 己知其中之二,求第三者
// 8 3
x y
x = x^y;
y = x^y;
x = x^y;
}
#endif
void mySwap(int *px, int *py)
{
// int z = *px^*py;
// *px = z ^ *px;
// *py = z ^ *py;
*px = *px ^ *py;
*py = *px ^ *py;
*px = *px ^ *py;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 2;
int b = 5;
printf("a = %d b = %d\n", a, b);
mySwap(&a, &b);
printf("a = %d b = %d\n", a, b);
return 0;
}