位运算求解一个整数的二进制中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
- 位运算求解一个整数的二进制中1的个数
- 统计一个整数的二进制中1的个数(位运算技巧)
- 位运算之统计一个整数的二进制中1的个数
- 位运算--一个整数的二进制表示中1的个数
- 统计一个整数的二进制中1的个数(位运算技巧)
- 位运算之统计一个整数的二进制中1的个数
- 位运算--求一个 数二进制中1的个数
- 位运算:二进制中1的个数
- 二进制中1的个数----位运算
- 位运算------二进制中1的个数
- 一个整数二进制中1的个数
- 用位运算求给定整数的二进制表示中1的个数
- 位运算实现反转字节和求二进制整数中1的个数(无循环)
- 位运算之求整数二进制表示中1的个数
- 巧用位运算求解二进制中1的个数
- 《编程之美 》2.1 位运算实现—交换两个整数、求和、整数的二进制表达中1的个数
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法(ZZ)
- 第14周 项目一
- js的AMD、CMD和CommonJs规范
- tomcat如何配置环境变量
- 模式识别 - 处理多示例学习(MIL)特征(matlab)
- SQLite3 安装、基本操作
- 位运算求解一个整数的二进制中1的个数
- 设计模式(10)--状态模式
- 深入浅出Java多线程编程
- unity 笔记 一
- textarea 输入换行存入数据库,显示出来也要换行的解决方法。
- 类的静态成员函数和静态成员变量的使用
- vector源码
- SpringMVC三种handlerMapping配置
- response.sendRedirect() 和 dispatcher.forward(request,response)之间的区别