描述:
计算在一个 32 位的整数的二进制表式中有多少个 1
.
样例
给定 32
(100000),返回 1
给定 5
(101),返回 2
给定 1023
(111111111),返回 9
分析:
要获得一个整数的二进制有多少个“1”,需要知道整数是通过除2取余来获得该整数的二进制。所以可以采用一个计数器,对num循环除2取余数,如果余数为“1”,计数器加1,获得该整数的二进制中“1”的个数
代码实现:
public int countOnes(int num) {
// write your code here
int count = 0;
//如果num小于0需要将num转换成无符号整数
if(num<0){
long unum = num & Integer.MAX_VALUE;
unum |= 0x80000000L;
while(unum>0){
if(unum%2==1){
count++;
}
unum/=2;
}
}else{
while(num>0){
if(num%2==1){
count++;
}
num/=2;
}
}
return count;
}