Counting 1-bits
来源:互联网 发布:车间看板设计软件 编辑:程序博客网 时间:2024/06/14 22:03
练习统计正整数中1的个数。两个经典的算法
int OneNum_MnsOne(unsigned int aInt){
int num=0;
while(aInt != 0){
num++;
aInt = aInt & (aInt - 1);
}
return num;
}
int OneNum_DvdCnq(unsigned int aInt){
//每两位统计1的个数。
aInt = (aInt & 0x55555555) + ((aInt>>1) & 0x55555555);
//剩下的工作就是把这些统计后的1个数相加得到所有1的个数。先是两位两位的加
aInt = (aInt & 0x33333333) + ((aInt>>2) & 0x33333333);
//四位四位的加
aInt = (aInt & 0x0F0F0F0F) + ((aInt>>4) & 0x0F0F0F0F);
//八位八位的加
aInt = (aInt & 0x00FF00FF) + ((aInt>>8) & 0x00FF00FF);
//16位16位的加就得到结果
aInt = (aInt & 0x0000FFFF) + ((aInt>>16) & 0x0000FFFF);
return aInt;
}
后一个算法在<<Hacker's Delight>>中讲了,想到这算法的人太牛了!书上用图说明了一个例子,看了这个图就明白很多了:
这个算法用“Dividing and Conquer”思想,其它像二分法,quicksort都是用了这个思想,好强大的思想。
- counting 1 bits SPOILER
- Counting 1-bits
- counting 1 bits C implementations
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- Counting Bits
- 开始学习android
- emacs is so wonderful
- 从今天开始,在csdn上写东西。
- android 平台优秀的文件管理器
- 2010中国十大管理实践之——国学管理
- Counting 1-bits
- 转《敏捷宣言》及其背后的12准则
- The GNU C Library Reference Manual—Introduction笔记(1)
- ADO在C++中的使用
- 真是麻烦啊
- 获取局域网中所有主机与IP地址
- jquery实现QQ新闻图片滚动
- 庖丁解牛-----winpcap源码彻底解密(一)
- ganxie