在我复习的过程中,很多面试题,甚至笔试题中,都用到了多次求一个整数的二进制表达中1的个数或者0的个数,网上的资料比较乱,我在此做个小记录,算是自己的一点总结,也希望对大家有帮助!
1.1 求二进制数中 1 的个数(java版——算法转换)
public int getNumOfOne_1(int num){
int count = 0;
while(num != 0){
num = num & (num - 1);
count++;
}
return count;
}
1.2 求二进制数中 1 的个数(java版——普通解法)
public int getNumOfOne_2(int num){
int count = 0;
for(int i = 31; i > 0; i--){
if((num&1) == 1)
count++;
num >>= 1;
}
return count;
}
2.1 求二进制数中 0 的个数(C语言版—算法转换)
int numOfZero(x){
while(x+1){
count++;
x = x|(x+1);
}
return count;
}
2.2 求二进制数中 0 的个数(java语言版—普通解法)
public int getNumOfZero_2(int num){
int count = 0;
for(int i = 31; i > 0; i--){
if(num == 0)
break;
else{
if((num&2) == 0)
count++;
num >>=1;
}
}
return count;
}