方法一:
int count_one_bits(unsigned val) {
int count = 0;
for (; val != 0 ; val >>= 1) {
//如果最低位为1,则增加计数器的值。
if (val & 1 != 0) ++count;
}
return count;
}
方法二:
int count_one_bits2(unsigned val) {
int count = 0;
while (val) { //val==0, 推出循环
val &= val - 1; //原数二进制位中最右边的1转换为0
++count;
}
return count;
}
补充:
设指定位用bit_numbers表示。
将指定位设置为1:val |= 1 << bit_numbers;
将指定位设置为0:val &= ~ (1 << bit_numbers);