题目概述
实现一个函数,要求输入一个整数,输出该数对应的二进制数中1的个数
比如9表示成二进制是1001,那么输入9的话,屏幕上打印2
求解方法1
代码实现
size_t numberOf1(int value)
{
int count = 0;
while(value)
{
if(value&1)
++count;
value = value >> 1;
}
return count;
}
分析:
这种方法遇到的一个问题就是负数,如果传入一个-1,那会怎样?
对,无限循环
我们需要改进
求解方法2
代码实现
//防止出现负数导致无线循环
size_t numberOf1(int value)
{
int count = 0;
for(size_t i = 0; i<32; ++i)
{
if(value%1)
++count;
value = value >> 1;
}
return count;
}
分析:
负数也可以进行计算,但每次都要循环32次,能不能优化一下呢?
求解方法3
代码实现
//当一个数与上比自己小1的数,那么该数最后一个1会被置为0
size_t numberOf1(int value)
{
int count = 0;
while(value)
{
++count;
value = (value - 1)&value;
}
return count;
}