计算一个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)); }