题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。例如输入9,输出应该是2.
分析:有两种方法,第一种比较好想的到,第二种难一点。
java代码实现:
//第一种方法描述:为了不死循环,选择左移1,总共移32次判断整数的所有位的1的个数。
private static int numberOfone(int num) {
int number = 0;
int flag = 1;
while(flag != 0) {
if((num & flag)!=0)
number++;
flag = flag<<1;
}
return number ;
}
//第二种方法描述:把一个整数减去1,在和原来整数做与运算,会把整数最右边的1变成0。以此类推。
private static int numberOf1(int num) {
int count = 0;
while(num > 0) {
count++;
num = (num -1) & num ;
}
return count ;
}