多个数的异或

走在路上,太阳太烈。突然想到个问题,异或的结果跟顺序有关吗?
对于异或来说, 一般教科书的解释是两个数相同则为0,不同则为1。
来点以前做硬件时候的感想,半加法器是由异或和与门来搭建的, 异或逻辑作为本位,与门作为进位。这样呢,可以感性地理解一些问题,来点小学的数学,加法的结果跟顺序是无关的,所以异或的结果跟顺序是无关的。
这里,做点简单的测试,一段java代码。
permutation 是通过dfs生成所有的组合。
hasEqualXorRequest 返回所有组合的异或值是不是相同。


public class TestXor {
 
 public ArrayList> permutation(ArrayList array){
  ArrayList> res = new ArrayList>();
  ArrayList path = new ArrayList();
  dfs(array, path, res);
  return res;
  
 }
 
 public void dfs(ArrayList A, ArrayList path, ArrayList> res){
  if(path.size() == A.size()){
   res.add(new ArrayList(path));
  }
  for(int i: A){
   if(path.contains(i)){
    continue;
   }
   path.add(i);
   this.dfs(A, path, res);
   path.remove(path.size() - 1);
  }
 }
 
 
 public int getXorSingle(ArrayList sample){
  int i = 0;
  for(int x: sample){
   i = i ^ x;
  }
  return i;
 }
 
 public boolean hasEqualXorRequest(ArrayList> samples){
  if(samples.size() <= 1){
   return true;
  }
  int xorResult = this.getXorSingle(samples.get(0));
  for(ArrayList sample: samples){
   if(this.getXorSingle(sample) != xorResult){
    return false;
   }
  }
  return true;
 }
 
 public static void main(String[] args) {
  TestXor tx = new TestXor();
  ArrayList array = new ArrayList(Arrays.asList(1,2,3,4,5));
  ArrayList> res = tx.permutation(array);
  System.out.println(res.size());
  System.out.println(res);
  System.out.print(tx.hasEqualXorRequest(res));
 }
}

你可能感兴趣的:(多个数的异或)