对于位运算,是指对二进制数的每一位进行运算,其中有与或非,同或等操作,与位| ,或为&,非为~,异或为^,对于与运算来说,如果两个数都为1,则结果为1,或运算,如果两个数有一个为1,则结果为1,异或,两个数不同的话,结果为1。
对于异或运算来说,可以用于消除重复等等操作
以一个题目为例:存在一个长1001的数组,中间存放着1~1000的数还有一个与其中同样的一个数,现在需要将这个数找到,请设计算法
import java.util.Arrays;
import java.util.Random;
public class test1 {
public static void main(String[] args) {
int[] list =new int[1001];
for( int i=0;i<list.length-1;i++)
{
list[i]=i+1;
}
list[list.length-1]= new Random().nextInt(list.length-1)+1;
int index =new Random().nextInt(list.length);
int temp;
temp= list[index];
list[index]=list[list.length-1];
list[list.length-1]=temp;
System.out.println(Arrays.toString(list));
int x=0;
for (int j = 0; j < list.length-1; j++) {
x=(x^(j+1));//可以从二进制来看1^2=0010^0001=0011=3
System.out.println(x);
}
System.out.println();
for(int p =0;p<list.length;p++)
{
x=(x^list[p]);
System.out.println(x);
}
System.out.println(x);
System.out.println("=============");
int y=0;
int[] helper =new int[list.length];
for(int z=0;z<list.length;z++)
{
helper[list[z]]++;
}
for(int i =0;i<list.length;i++)
{
if(helper[i]==2)
{
System.out.println(i);
y=i;
}
}
}
}