您的位置:首页 > 其它

求二进制中1的个数

2016-01-07 20:31 232 查看
普通 (暴力) 方法:先求int位数,然后循环记录1的个数

int  NumberOf1(int n) {
int loopnum = 8 * sizeof(int), ans = 0;
while(loopnum--){
ans += n&0x1;
n = n>>1;
}
return ans;
}


优化版本:

记住一句话:将原码最低位的1的左侧全部求反即为补码。

于是就出现了下面的代码:

int  NumberOf1(int n) {
for(unsigned int r = 0, m = n; ; ++r, m -= m & -m)
if(m == 0) return r;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: