写一个函数返回参数二进制中1的个数。
方法1:采用模2除2的方法
在这里我们以11为例子
11在内存中的存储是二进制:0000 0000 0000 0000 0000 0000 0000 1011
11%2=1
再将11/2(也可以看成二进制数右移一位)
11/2=5 其二进制:0000 0000 0000 0000 0000 0000 0000 0101
5%2=1
此时再将 5/2(再进行了一次右移动)
得到2 其二进制: 0000 0000 0000 0000 0000 0000 0000 0010
2%2=0
再将2/2(又进行了一次右移动)
得到1 其二进制:0000 0000 0000 0000 0000 0000 0000 0001
1%2=1
再将1/2 得到0 二进制:0000 0000 0000 0000 0000 0000 0000 0000
二进制中再无1,结束判断
可知11的二进制中1的个数有3个
代码如下:
int count_one_bits(unsigned int value){
int count = 0;//用来存储1的个数
while (value > 0){
if (value % 2 == 1){
++count;
value = value / 2;
}
else{
value = value / 2;
}
}
return count;
}
int main(){
int a = 11;
printf("%d\n", count_one_bits(a));
sy