计算在一个 32 位的整数的二进制表式中有多少个 1
.
样例
给定 32
(100000),返回 1
给定 5
(101),返回 2
给定 1023
(111111111),返回 9
public class Solution {
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
public int countOnes(int num) {
// write your code here
int count=0;
int temp;
int flag=0;
if(num<0){
//负数转二进制的方法是保持符号位不变,把对应正数转为二进制后取反加1
//即用补码表示负数
//可直接对应为负数的绝对值-1后转为二进制后取反。符号位不变
num=-num;
num=num-1;
flag=1;
}
while(num!=0){
//十进制正数转换为二进制的方法
//得到的所有temp连起来反转就是对应的二进制
temp=num%2;
if(temp==1)
count++;
num=num/2;
}
//负数时,-1后的正数有几个1,就是负数有几个0.
//在num/2等于0之后的部分正数对应的二进制均为0,则负数对应的都为1
if(flag==1)
return (32-count);
return count;
}
};