位操作-找到数组中只出现一次的数字

来源:互联网 发布:做优化代理 编辑:程序博客网 时间:2024/05/19 20:59
题目一:数组中数字都两两相同,只有一个不同,找出该数字:


int findUnique(int* a, int len){int i = 1;int temp = a[0];for(; i < len; i++){temp = temp ^ a[i];}printf("%d ", temp);} 

题目二:数组中数字两两相同,有两个不同,找出这两个:


#include <stdlib.h>int a[] = {1,1,2,4,3,3,2,5};int findXorSum(int* a, int len){int i = 0;int temp = 0;for(; i < len; i++){temp = temp ^ a[i];}return temp;} int findFirstBit1(int n)  {      int count = 1;      while(!( n & 1))      {          n = n>>1;          count++;      }      return count;  }  int isBit1(int a, int count){a = a >> count-1;return (a & 1);}void findTwoUnique(int* a, int len){int i = 0;int m = 0, n = 0;int temp = findXorSum(a, len);int count = findFirstBit1(temp);for(; i < len; i++){if(isBit1(a[i],count)){m = m ^ a[i];}else{n = n ^ a[i];}}printf("%d, %d", m, n);}int main(){findTwoUnique(a,8);}


原创粉丝点击