计算一个整数(无符号)中值为1的位的个数
算法1:逐位右移,利用最后一位是1则是奇数的特性判断:
int count_one_bits(unsigned value) {
int ones;
for(ones = 0; value != 0; value = value >> 1) {
if (value % 2 != 0) {
ones++;
}
}
return ones;
}
int main() {
unsigned num1 = 0b10000000;
unsigned num2 = 0b11111111;
unsigned num3 = 0b11100000;
unsigned num4 = 0b11001110;
printf("%d contains %d bits which is 1\n",num1, count_one_bits(num1));
printf("%d contains %d bits which is 1\n",num2, count_one_bits(num2));
printf("%d contains %d bits which is 1\n",num3, count_one_bits(num3));
printf("%d contains %d bits which is 1\n",num4, count_one_bits(num4));
return 0;
}
算法2:
技巧:利用位操作 & | ^ 和移位操作符可以操作制定的位。
eg 1: value = value | 1 <<