位运算求解一个整数的二进制中1的个数

来源:互联网 发布:制作公章软件 编辑:程序博客网 时间:2024/05/04 15:45


法一:

#include<iostream>#include<algorithm>using namespace std;int Count(int x){    int ans = 0;while(x != 0){    ++ans;    x = x&(x-1);}return ans;}int main(){cout<<Count(9999)<<endl;return 0;}

输出结果:8

分析如下:

1. Count函数用来计算某个数x的二进制中1的个数

2. x&(x-1)的作用是把x的二进制中最右边的1变成0;假设现在x的二进制位1001000,则x-1的二进制为1000111

    则x&(x-1)可以把最右边的一个1去掉。

    当一个数减1的时候,它最右边的那个值为1的位将变成0,同时1右边的所有位变成1.

3. 再把结果赋值给x,这样就可以求出x的二进制中1的个数


法二

#include<iostream>#include<algorithm>using namespace std;int Count(int x){    int ans = 0;while(x != 0){if(x&1){   ++ans;}x >>= 1;}return ans;}int main(){cout<<Count(9999)<<endl;return 0;}
输出结果是:8

分析:

1. Count函数用来计算一个数x的二进制中1的个数

2. x&1的结果用来判断x的最右边的一位是1还是0,如果是1则x&1则为1,如果是0则x&1则为0;

   如果x&1则把ans加1

3. 求完一位之后就把x右移一位。

   假设x的二进制位00000000 00000000 00000000 10101100,可以求出有三个1。


0 0
原创粉丝点击