简略记忆:同0异1
1.由于0^0=0 0^1=1 所以,0^任何数 = 任何数
2.由于1^0=1 1^1 =0所以,1^任何数 = 任何数取反
3.任何数^任何数 = 0;
4.用于将特定的位反转,如对10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。原因见2
5.通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。
例如 a= 10100001
b= 00000111
a=a^b; //a=10100110
//此步操作是将a b原值的相同位记录为0,不同位记录为1.
//并保存在a中,b值此步并没有发生变化
//由于1^任何数 = 任何数取反 0^任何数 = 任何数
b=b^a; //b=10100001
//a中用1表示原值中对应位不同的部分
//做异或操作是将b中与(原a)中相同的部分保留,与(原a)中不同的部分取反
//即将变成原来的a
a=a^b //a=00000111
//由于此时的a表示异同,b表示原来的a
//同理第二部步可获得原b值,赋给a即可实现转换
6.异或运算的特点:a两次异或同一个数b(a=a^b^b)仍然为原值a。//参考(5)即可知。
7.异或是可交换的:a^b = b^a
8.异或运算法则:
1. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
2. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
2. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.