go
var swap func(a, b *int) = func(a, b *int) {
*a ^= *b
*b ^= *a
*a ^= *b
}
c
void swap(int* a,int* b){
*a^=^*b=^*a=^*b;
}
a 0 0 1 1
b 0 1 0 1
a1=a^b 0 1 1 0
b1=b^(a^b) 0 0 1 1
a2=a1^(b1^(a^b)) 0 1 0 1
a^b=b^a
b^(a^b)=b^a^b=b^b^a=a
(a^b)^[b^(a^b)^(b)]=b
满足交换律
应用:
交换切片的元素
s: []int{1, 2, 3}, i: 1, j: 2
s[i] ^= s[j]
s[j] ^= s[i]
s[i] ^= s[j]
-->
[]int len: 3, cap: 3, [1,3,2]