题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示二进制是1001,有2位是1.因此,如果输入9,则该函数输出2.
思路:定理:一个数n和n-1相与相当于将n的二进制表示的最右边的1变为0。为什么呢?因为n-1的二进制就是n的二进制的最右边的1变为0,最右边1后面的位都变为0,例如:n=11010000,n-1=11001111.所以,该题目可以利用该定理来做。
解法:
public class Test1 {
public static void main(String[] args) {
System.out.println(findNumberOf1(7));
}
private static int findNumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}