如一个int 数
00000000 00000000 00001010 01000000
如何将最右侧的1取出来
我们先把整个二进制数取反
11111111 11111111 11110101 10111111
再加1得
11111111 11111111 11110101 11000000
再将加1的值和原值&操作
11111111 11111111 11110101 11000000
00000000 00000000 00001010 01000000
得到
00000000 00000000 00000000 01000000
这样就取出来了
所以代码表示为
N&((~N)+1)
这里我们就可以写出代码判断1在二进制中出现的次数
public static int bit1counts(int N){
int count = 0;
while(N !=0){
int rightOne = N&((~N)+1);
count++;
N^=rightOne; //异或的话可以去掉最右侧的1
}
return count;
}