数值转化成二进制后包含1的数量
2014-04-03 19:40
204 查看
#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。
相关文章推荐
- 求一个数转化成二进制之后包含1的数量
- 求一个数转化成二进制之后包含1的数量
- 计算x转化成二进制包含1的数量
- 十进制数转化成二进制后包含一的数量(c++)
- 无聊的测试-计算某数值转化为二进制时 含1的个数
- 将串口接收到的字符串转化为数值(包含小数)
- 计算整数的二进制中包含1的数量
- 数值转化(如十进制到二进制)
- C++将一个数值转化为二进制字符串
- 字符串与二进制互相转化(不包含汉字)
- 计算X转为二进制后,包含1的数量
- Java数值转化为二进制、十进制、十六进制字符串
- 一个数值转化为二进制 位运算和位域
- 二进制中包含1的数量
- ECSHOP商品购买数量增加加减按钮插件(包含购物车商品数量增加减少,自动更新)
- 判断一无符号整数的二进制形式中是否包含偶数个1
- 转换函数:TO_CHAR()用法之一 将一个数值转化成字符串
- 二进制转化为十进制
- C#科学计数法转化为正常数值
- int 数值翻转 ,例如将 123 转化成321