求出二进制中1的个数(葵花宝典你值得拥有)
来源:互联网 发布:昆仑墟麒麟臂升阶数据 编辑:程序博客网 时间:2024/06/05 06:54
Hello,大家好,今天Val来给大家分享算法如何求二进制中一的个数。
给一个整数,如何求二进制中1的个数?
1、数据右移(可能导致死循环)
一般情况下很容易会想到,用1来和这个数的二进制的每一个位做与运算,如果结果为1,给计数的个数+1,不是的话继续看其他位,最后得出计数结果就是这个数二进制中1的个数。
代码如下:
int CountOne(int num){ int count = 0; while (num) { if (num & 1) { count++; } num = num >> 1;//num右移1位 } return count;}
但是这中算法是有弊端的,它可能会导致死循环,如果要计算的数是0x80000000,那么移位之后为了保证仍是负数,移位后最高位会设置为1,右移移位变成0xC0000000,如果一直做右移运算,最终这个数字就会变成0xFFFFFFFF陷入死循环。
2、让1左移与数据作&运算
为了避免死循环,让数据不动,1与数据作&运算,接着左移1,判断次低位是否为1,反复循环,最终得到1的数目。
//代码:
int Countone1(int num){ int count = 0; unsigned int Op = 1; while (Op) { if (Op&num) { count++; } Op=Op << 1; } return count;}
3、num&(num-1)
把一个整数和它减去1的结果做与运算,相当于把它最右边的1变成0,让这个数等于它&(它-1),一个二进制中有多少个1,就会做多少次这样的操作。
代码如下:
int Countone2(int num){ int count = 0; while (num) { count++; num = num&(num - 1); } return count;}
阅读全文
1 0
- 求出二进制中1的个数(葵花宝典你值得拥有)
- 快速求出整数的二进制表示中包含的bit 1的个数
- 1~N中求出1的个数
- 二进制中1的个数(2)
- 二进制中1的个数(2)
- 统计二进制数中“1”的个数(懂二进制)
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 递归与动态规划---斐波那契系列问题的递归,动态规划与矩阵乘法
- bufferknife总结(二)
- android studio的汉化 教程 及解析
- Maven快速入门
- VBA处理文件框架代码 【第三部分:具体处理】
- 求出二进制中1的个数(葵花宝典你值得拥有)
- HashMap的数据结构
- 金融数据的尖峰厚尾
- 安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle
- HexUtil工具类
- idea 开发插件。
- hdu 6096 String(AC自动机)
- 你也可以找到好工作(三)大结局
- android studio java工程 报错