c语言---一个数x中值为1的位数(3个版本)
来源:互联网 发布:oracle重复数据筛选 编辑:程序博客网 时间:2024/05/16 09:29
/*版一*/
unsigned int bitcount(unsigned int x)
{
int b;
for(b=0;x != 0;x >>= 1)
{
if(x&01)
b++;
}
return b;
}
/*版二*/
unsigned int bitcount(unsigned int x)
{
int b;
for(b=0;x != 0;)
{
x &= (x-1); /* 这里的做用是每次都会在原的的数的基础上去掉一个1,贼酷 */
b++;
}
return b;
}
/*版三*/
unsigned int bitcount(register unsigned int x)
{
x -= ((x > > 1) & 0x55555555);
x = (((x > > 2) & 0x33333333) + (x & 0x33333333));
x = (((x > > 4) + x) & 0x0f0f0f0f);
x += (x > > 8);
x += (x > > 16);
return(x & 0x0000003f);
}
/*第3个版本的清晰版本*/
unsigned int bitcount(register unsigned int x)
{
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return(x & 0x0000003f);
}
//进一步解释:看图吧,已经山穷水尽啦,如果还不明白请打120
/*其实这个算法很简单,就是把这个数中的所有的1都加起来就可以了*/
- c语言---一个数x中值为1的位数(3个版本)
- 统计x中值为1的二进制位数
- C语言快速计算出一个无符号数一共有多少个“”1”位数的方法
- 【C语言】计算一个数二进制中一的位数
- C 如何判断一个数的位数
- C语言:判断一个数是否为回文数(回文数也是一个数字,数字的特点是正反序是同一个数字,如:12321,3443)
- 【C/C++】:如何获得一个float数的小数位数?
- 如何得到一个数的个、十、百、千位数
- 怎样计算给定一个二进制数中为1的位数, 附源码
- 奇怪的信 c语言 整数位数为偶数求和
- 删除链表中值为x的元素结点(java语言)
- 用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数
- 计算一个N个选项中和为X的所有组合数
- 计算一个数的位数
- 判断一个数的位数
- 【C语言】判断一个数是否为回文数
- 【C语言】判断一个数是否为回文数
- (c++)给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
- 定位预处理指定
- Tomcat配置SSL(单向认证)
- 如何添加系统中Lib到当前项目
- 如何添加系统中的头文件(.h)到当前项目
- 如何在Studio使用汇编调试
- c语言---一个数x中值为1的位数(3个版本)
- 怎样处理ClassZiard找不到的系统消息
- 如何干净的删除一个类
- 在Studio中快速切换两个文件
- 取得源程序预处理后的结果
- 在Debug模式中查看WINAPI调用后的返回值:
- 产生指定源程序文件的汇编代码
- Delphi中array of const应用
- 手工编译纯资源成dll