求二进制数中1的个数--Java实现
来源:互联网 发布:java返回值作用 编辑:程序博客网 时间:2024/06/05 10:41
在编程之美中看到“求二进制数中1的个数”这个问题,读来很受启发遂用Java语言实现相关的方法,写此文章以记之。
方法一:用除和求余,代码如下
public int count(byte v){int num=0;while(v!=0){if(v%2==1)num++;v/=2;}return num;}
方法二:用“与”操作和移位,代码如下
public int count(byte v){int num=0;while(v!=0){if((v&0x01)==1)num++;v>>>=1;}return num;}方法三:用1来进行判断,代码如下
public int count(byte v){int num=0;while(v!=0){v&=(v-1);num++;}return num;}方法四:用查表法来实现,代码如下
int[] countTable={ 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8 }; public int count(byte v){ return countTable[v]; }综合上述方法,个人比较倾向于第三中方法,其算法复杂度只于1的个数有关。在频繁需要用到此功能的应用中可以用第四种方法,是典型的以空间换时间的方法,其时间复杂度为O(1).
- 求二进制数中1的个数--Java实现
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中 1 的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- 求二进制数中1的个数
- “求二进制数中1的个数”
- 求二进制数中1的个数
- struts2 中 Actionsupport 的作用
- _tmain与main,winMain,wmain
- Fibonacci数列的奇偶性
- 冒泡排序
- 细说多线程1
- 求二进制数中1的个数--Java实现
- 第15周项目三--带姓名的成绩单
- cocos2d-x for wp7在cocos2d-x里面手势识别
- 分布式核心技术之:协调设计解析
- 选择排序
- 细说多线程2
- Android官方教程翻译(6)——添加ActionBar
- 程学旗解读《大数据热点问题与发展趋势》&《大数据白皮书》
- 口水文章3——Android SDK Manager下载速度巨慢的解决办法