用^表示异或运算符,则异或的运算法则为: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的办法可靠。