题意:要求返回一个数二进制序列中1的个数
要获取一个数的二进制序列1:利用连除法将序列依次逆序输出。2:利用位运算直接从内存中调用。
方法一:连除法
int count_bits_one(int unsigned num)
{
int count = 0;
while(num)
{
if(num%2==1) //利用将十进制数字转化为二进制数字的基本方法连除法依次得出二进制序列
{count++;} // 每一位的值并判断其是否为1。
num=num/2;
}
return count;
}
注意:使用该方法统计时,需在函数定义时标注其为无符号参数int count_bits_one(int unsigned num);
eg:当num=-1时,(-1)!=1,进入while循环但(-1)%2=0;所以return count=0,与正确的值32不符。
为避免输入负值出错的状况,需将形参定义为无符号型。
方法二:按位遍历法
int count_bits_one(int unsigned num)
{
int count = 0;
int i = 0;
for(i = 0;i<32;i&