【算法笔记】运用位运算快速交换两个值

算法 / 2023-08-02

int a = 甲;
int b = 乙;
a = a ^ b; ( a = 甲 ^ 乙)
b = a ^ b; ( b = 甲 ^ 乙 ^ 乙 = 甲)
a = a ^ b; ( a = 甲 ^ 乙 ^ 甲 = 乙)

此方法的漏洞:
如果交换同一个地址的值,那该值将被变为0;
例如

arr[j] = arr[j] ^ arr[k];
arr[k] = arr[j] ^ arr[k];
arr[j] = arr[j] ^ arr[k];

如果 j = k,无论arr[j]原先存的是何值,最后都会变为0