异或(XOR, Exclusive OR)也叫半加运算模2和,其运算法则相当于不带进位的二进制加法。
    用^表示异或运算符,则异或的运算法则为:0^0=0,1^0=1,0^1=1,1^1=0,这些法则与加法是相同的,只是不带进位。
所以,异或满足交换律和结合律:
  1. a ^ b = b ^ a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
  3. d = a ^ b  ^ c 可以推出 a = d ^ b ^ c.
  4. a ^ b ^ a = b. (因为a^a=0)

所以swap两个int型变量a和b的值有更简单的办法:
    c = a^b; // c为临时变量
    b = c^b; // b得到a的值
    a = c^b; // 此时b就是最初的a
再将c换成a即可,省一个变量的存储空间。
    a ^= b;
    b ^= a;
    a ^= b;
这3行代码简洁,只有一个问题,如果a与b是同一个变量的引用,则a与b会变成0,所以还是引用中间变量c的办法可靠。
10-23 20:03