// 求二进制数中1的个数
#include <stdio.h >
// 方法1
int getCount1 ( unsigned int n )
{
int cnt = 0;
while (n )
{
// 取得二进制数的最右边的位
cnt += n & 0x01;
// n右移一位
n >>= 1;
}
return cnt ;
}
// 方法2
int getCount1_ ( unsigned int n )
{
int cnt = 0;
while (n )
{
n &= (n - 1) ;
cnt ++;
}
return cnt ;
}
int main ()
{
int a ;
a = 0x0;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x01;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x02;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x03;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0xffffffff;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x0;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x01;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x02;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x03;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0xffffffff;
printf ( "%d %d/n" , a , getCount1_ (a ));
return 0;
}
#include <stdio.h >
// 方法1
int getCount1 ( unsigned int n )
{
int cnt = 0;
while (n )
{
// 取得二进制数的最右边的位
cnt += n & 0x01;
// n右移一位
n >>= 1;
}
return cnt ;
}
// 方法2
int getCount1_ ( unsigned int n )
{
int cnt = 0;
while (n )
{
n &= (n - 1) ;
cnt ++;
}
return cnt ;
}
int main ()
{
int a ;
a = 0x0;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x01;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x02;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x03;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0xffffffff;
printf ( "%d %d/n" , a , getCount1 (a ));
a = 0x0;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x01;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x02;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0x03;
printf ( "%d %d/n" , a , getCount1_ (a ));
a = 0xffffffff;
printf ( "%d %d/n" , a , getCount1_ (a ));
return 0;
}