异或:^

7^13=10
7: 0111
13: 1101
10: 1010

相同为0,不同为1(无进位相加)

0^N=N
N^N=0
A^B=B^A
(A^B)^C=A^(B^C)

两数交换(不能是同一个内存地址)

A=A^B (A=A^B)
B=A^B (B=A^B^B=A)
A=A^B (A=A^B^A=B)

上面的限制也适用于下面的代码

A=A+B (A=A+B)
B=A-B (B=A+B-B=A)
A=A-B (A=A+B-A=B)

得到最左侧的非0数值

A&(-A)=A&(~A+1)