#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
第一种方法,如果一直位数是32位,那么从地位,一直与1进行与操作,一共进行32次与操作比较,计数器每遇到一次,就+1
int count_one_bits(unsigned int n)
{
int i = 1;
int count = 0; //0000 1101
for (i = 1; i <32; i++) //0000 0001
{
if ((n & 1) == 1)
{
count++;
}
n = n >> 1;
}
return count;
}
第二种方法,当前数如果不为零,则右移与1比较,计数+1.如果当前值为0 跳出循环,返回count,说明已经没有
0
int count_one_bits2(unsigned int n)
{
int count = 0;
while(n!=0)
{
if ((n & 1) == 1)
{
count++;
}
n = n >> 1;
}
return count;
}
int main()
{
int sum = 0;
int sum2 = 0;
sum = count_one_bits(15);
sum2 = count_one_bits2(15);
printf("%d\n", sum);
printf("%d\n", sum2);
}