Description
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
Solutions
对于负数,通过其反码中0的个数间接求取
对于正数,通过左向平移并判断最低位是0是1来计数
太简单,直接看代码
Code
public int NumberOf1(int n) {
if(n < 0){
// int类型有32bit
// 利用n的反码中0的个数间接求取,负数n的反码为-n-1
return 32 - NumberOf1(-n-1);
} else {
int result = 0;
// 循环向左平移(或者除以2),直到平移结束
while(n > 0){
// 取最低位数值
if(n%2 == 1){
// 计数1的个数
result++;
}
n = n>>1;
}
return result;
}
}