#define SWAP(x,y) (x ^= y ^= x ^= y)
解释:x,y交换实际上只需要交换x,y对应二进制位不同的位
Step1、x=x ^y 获得掩码,所有不同的二进制位
Step2、Step1获得的掩码与y异或,x,y原来相同的位不变,不同的位取反,(0与其他数异或没有影响,1与其他数异或取反),这样操作之后y就是原来的x
y ^= x ^= y
Step3、此时的y便是原来的x,再与Step1 得到掩码异或得到y
x ^= y ^= x ^= y
算法的关键是第一步获得掩码,然后根据异或实现相同位不变,不同的位取反