位运算 交换2个数 异或运算

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]
 
posted @ 2022-05-20 17:48  papering  阅读(38)  评论(0)    收藏  举报