数值转化成二进制后包含1的数量

来源:互联网 发布:象棋比赛软件 编辑:程序博客网 时间:2024/05/04 07:33

#include <iostream>using namespace std;int func(int x){    int count = 0;    while(x)    {        count++;        x = x&(x-1);    }        return count;}int main(){    cout<<func(9999)<<endl;   //怎么算出9999转换成二进制有多少位为1呢,有简便算法吗    return 0;}

其实,最关键的部分就是“x &= x -1; ”

说明:不管二进制是什么,减1就会从右到左把0变为1,直至碰见1,把1变为0才结束.
如果x=x&(x-1), 就是把从左到右连续的0都变为1,并且遇到的第一个1变为0!
举例:10010100000  减1  就是:10010011111  ,再“&”就等于 10010000000  
这样循环一次,就是把最右边的1变为零。
有多少个1,就循环多少次。直到最后x的值变为0。
0 0
原创粉丝点击