在看HashMap的hashcode如何生成时,看到了异或运算,所以特意复习了一下异或的应用场景。
在Java中异或用^表示。对运算符两侧数的每一个二进制位,同值取0,异值取1
有以下定律:
1、交换律
2、结合律(即(a^b)^c == a^(b^c))
3、对于任何数x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A XOR 0 = A
网上找到一些应用实例:
1. 无第三个参数下,交互值。利用异或的自反,结合定律
int a = 10, b = 5
a = a ^ b;
b = a ^ b;
a = a ^ b;
结果, a = 5, b=10;
2. 一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数?
利用异或的自反定律
1 public void fun() { 2 int a[] = { 22, 38,38, 22,22, 4, 4, 11, 11 }; 3 int temp = 0; 4 for (int i = 0; i < a.length; i++) { 5 temp ^= a[i]; 6 } 7 System.out.println(temp); 8 }