时间限制:1秒 空间限制:32768K 热度指数:324203
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
常规解法:
得到整数的二进制表示,再数其中1的个数
public int NumberOf1(int n) {
int t=0;
char[]ch=Integer.toBinaryString(n).toCharArray();
for(int i=0;i<ch.length;i++){
if(ch[i]=='1'){
t++;
}
}
return t;
}
第二种方法:
位运算
方式1:无符号右移数个数
public int NumberOf1(int n) {
int count= 0, i= 0;
while(i<32){
count+= (n>>>i) & 1;
i++;
}
return count;
}
方式2:该数自己与自己判断数个数
public int NumberOf1(int n) {
int count = 0;
while(n!= 0){
count++;
n = n & (n - 1);
}
return count;
}