无符号数对应二进制返回参数中1的个数;
例如:15: 0000 1111 4个1;
14 1110
13 1101
12 1100
11 1011
10 1010
int count_one_bits(unsigned int value)
#include<stdio.h> //函数返回参数二进制中1的个数;
#include<stdlib.h> //
int count_one_bits(unsigned int value)
{
① int count=0;
while(value)
{ value=&(value-1)
value=value&(value-1); //与操作;15 &14=1110 1110&13=1100;
1100&12=1100 12&11=1000 (一个数和比自己小的数相与时,最后一位的1逐渐就没有了
,不断清除n 的二进制表示中最右边的1同时累加,运算次数与输入n的值无关,
只与n中1的个数有关;)
count++;
return count;
}
}
{
② int count=0;
for(i=0;i<32;i++) // 利用for语句循环,i给出范围,优化程序;
if((value>>i)&i)==1) // 右移i 位,与操作是否为1,判断数是否为1;
{
count++;
}
}
③ { 利用for语句循环,当i不等于0时,i逐渐右移等于1时进行操作;
当value 与1进行操作等于1时,count++;
int i=1;
int count=0;
for(i=1;i!=0;i<<=1)
{
if((value&1)=1)
{
count++;
}
}
④
int count_one_bits(unsigned int value)
{ //十进制与二进制数间转换的法则,依次除余操作判断是否为1;
int n=0;
while(value)
{
if(value%2==1)
{
num++;
}
value=value/2;
return num;
}
{
unsigned int num = 0;
int ret = 0;
ret = count_one_bits(num);
scanf("%d", &num);
printf("count=%d", ret);
system("pause");
return 0;
}