提取一个二进制位最右侧的1
看左神的视频做个小记录,提取一个数最右侧的1
- 借助一下题目:
给你一个整数数组,里面只有两个数是出现奇数次,其余均出现偶数次,提取出这两个给数字
public static int[] function(int[] arr)
{
int eor1 = 0, eor2 = 0;
for (int i:arr)
eor1 ^= i;
int rightOne = eor1 & (~eor1 + 1);
for (int i:arr)
{
if((i & rightOne) == 0) //或者rightOne也可以,因为结果只可能是0或者rightOne
eor2^=i;
}
return new int[]{eor1 ^ eor2,eor2};
}