ero与arr为[a,b,c,c,d,d]全部异或后得到ero=a^b
因为a与b的二进制中必定存在某一位不一致,这样a与b才能是不同的数字,从两个数字位数不一致的最右侧开始找。
假设
a=101010,b=100101
经过aro&(~ero+1)即可得出a与b最右侧不一致
ero=001111~ero=110000
~ero+1=110001ero_2=ero&(~ero+1)=000001
for(int i=0,i<arr.length(),i++)
{
if(arr[i]&ero_2==1) //判断a[i]与ero_2在那一位是否一致,一致则将这位数赋值不一致另外赋值
{
a=arr[i]
}
else
{
b=arr[i]
}
}
值得注意的是赋值的是的数字而不是某一个数字的第几位,是判断这两个数字在第几位一个是0一个是1,并由此判断这为是1那就赋值给一个数,这位不是1那就把这个数字再另外赋值,最终将两个分开,但是并不能确定哪个是a哪个是b