剑指offer第11题:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
理解:
本题可以用最直接的方法,让1同最低位做与运算,如果结果不为0,说明这一位是1,计数器加1;另外一种方法是让输入n同(n-1)做与运算,这样每次运算可以消除一个“1”,同样可以计算“1”的个数。这种方法的效率更高,代码如下:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
n = n & (n-1);
count++;
}
return count;
}
}
知识点:
- 位运算;
- 位与运算