#include <stdio.h>
void swap(int * x, int *y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
int main() {
int a = 43;
int b = 20;
swap(&a, &b);
printf("a=%d, b=%d", a, b);
return 0;
}
结果:
a=20, b=43
原理:
利用了按位异或的性质:
(1)一个数对另一个数按位异或两次将保持不变。
如0对1按位异或两次仍然是0,即 (0^1) ^1 = 0
(2) 按位异或满足交换律。
因此,对于
a = (a^b)
b = b^ (a^b)
a = (a^ b) ^ (b^ (a^b))
交换位置:
b = b^ (a^b ) = a ^ b ^ b = a
a = (a^ b) ^ (b^ (a^b)) = b ^ a ^a ^ b ^b = b
请大家指正!