练习5: 计算一个32位无符号整数在二进制中1的个数, 顺便熟悉2进制和16进制

时间:2021-12-21 22:47:18

  计算一个32位无符号整数在二进制中1的个数.

  如2015, 它的16进制表示是0x7DF,2进制是11111011111, 在二进制中1的个数是10.

  (可以用windows里的计算器,选择程序员,来算16进制和2进制)


下面的实现,是一个很简单,没有优化的方法.


#include "stdafx.h"

int GetOneCount(unsigned int n)
{
	int count=0;
        for(int i=0;i<32;i++)
        { 
          if(n&1)
             count++;
          n=n>>1;
        }
        return count;
}
void main()
{
	unsigned int n1=0x7fffffff;
	unsigned int n2=0xffff;
	unsigned int n3=2015;

	printf("n1=%x %d\n",n1,GetOneCount(n1));
	printf("n2=%x %d\n",n2,GetOneCount(n2));
	printf("n3=%d %d\n",n3,GetOneCount(n3));
}