异或:^
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)