代码如下:
//采用辅助空间的方法 void SwapTmp(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } //没有采用辅助空间,运用异或计算 void SwapNotTmp(int* a, int* b) { *a = (*a) ^ (*b); *b = (*a) ^ (*b); *a = (*a) ^ (*b); } int main() { int a = 2; int b = 3; printf("交换前:a = %d, b = %d\n", a, b); //SwapTmp(&a, &b); SwapNotTmp(&a, &b); printf("交换后:a = %d, b = %d\n", a, b); return 0; }
异或特性:相同为0,不同为1
例:对于 2 与 3
2: 0 0 1 0
3: 0 0 1 1
M=2^3:0 0 0 1
M^2: 0 0 1 1
M^3: 0 0 1 0
所以就可以采取不用辅助空间交换两个数。