题目:
输入一个整数,判断该正数的二进制表示中有多少个1?如整数7,二进制为0111,共3个1.
分析:
整数n,如果n大于0,则其二进制形式至少有一位是1,如果将一个二进制数减1,那么这个二进制数的最右边的1将变成0,而这个1后面的0将全部变成1。例如二进制数1100,减1后是1011。这两个数相与的话,最右边的1及其后面的数均会变成0,这样就消掉了n最右边的1个1。因此对整数n循环减1相与,直至n=0,循环的次数就是二进制中1的个数。
代码
int TrueBitCounts(unsigned int n) { int count=0; while (n>0) { n=n&(n-1); count++; } return count; }
延伸:如果n可能是负数呢?
原文:http://www.cnblogs.com/wangzaizhen/p/5167167.html