异或百度百科。异或操作相同为0,不同为1,时间长了很容易就忘记,辛得高人指点,有了另外一种记忆方式:异或即为相同位相加无进位。如1^1,舍弃进位即为0;1^0即为1。
1、运算法则
- a^a=0。
- a^0=a。
- a^b=b^a。
- a^b^c=(a^b)^c=(a^c)^b=a^(b^c)。
- a^b^a=b。
根据上面的这些运算法则,可以运用到下面的一些算法题中。
2、两个变量交换
问题:不申请额外的变量实现交换两个变量。
1 | public void swap(int a,int b) { |
3、数组中一个出现奇数次的数字
问题:一个数组中有一个数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这个数。
1 | public void findNumberAppearOddTimes(int[] arr) { |
4、数组中两个出现奇数次的数字
问题:一个数组中有两个数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两个数。
1 | public void findNumberAppearOddTimes(int[] arr) { |