举个例子:返回十进制255或者15转换成二进制后1的个数。
#include<stdio.h>
int count_one_bits1(unsigned int value){ //方法1:让value不断右移i位再和1 与(&) 若结果为1则说明此位置为1
int num = 0;
for (int i = 0; i < 32; i++){
if ((value >> i) & 1 == 1){
num++;
}
}
return num;
}
int count_one_bits2(unsigned int value){ //方法2:让1不断左移i位再和value与(&)
若结果非0则说明此位置位为1
int num = 0;
for (int i = 0; i < 32; i++){
if (value & (1 << i) ){
num++;
}
}
return num;
}
int count_one_bits3(unsigned int value){ //方法3:让value值不断和(value-1)去与(&) 并且把值赋给value,直到value = 0结束 循环的次数就是1的个数
int num = 0;
while (value){
value = value&(value - 1);
++num;
}
return num;
}
int main(){
int input;
scanf("%d", &input);
printf("%d\n", count_one_bits1(input));
printf("%d\n", count_one_bits2(input));
printf("%d\n", count_one_bits3(input));
return 0;
}
输出结果如下: