方式一:假设整数为n,每次n与n-1做与运算,然后结果依次做与运算,这样每次都能去掉最右边的1,每做一次,count加依次,直到n=0
public int NumberOf1(int n) {
int count = 0;
while(n!=0){
count ++;
n = n & (n-1);
}
return count;
}
方式二:整数n每次与1做与运算,如果结果为1,则说明最后一位是1,然后让n右移一位继续与1做与运算,因为负数右移,高位补1,所以控制循环32次,因为一个int型整数4个字节共32位
public int NumberOf1(int n) {
int count = 0;
for (int i = 0; i < 32; i++) {
if ((n&1)==1){
count ++;
}
n >>= 1;
}
return count;
}
方式三:类似方式二,只不过是每次让1左移
public int NumberOf13(int n) {
int count = 0;
int num = 1;
while (num!=0){
if ((n&num)!=0)
count ++ ;
num <<= 1;
}
return count;
}
方式四:这个没什么好说的,就是把整数转化为二进制字符串,然后把字符串中的0替换为"",然后返回字符串的长度就可以
public int NumberOf1(int n) {
return Integer.toBinaryString(n).replaceAll("0", "").length();
}