计算一个字节里面有多少bit被置1 ,三种算法
来源:互联网 发布:淘宝巨型猪笼草 编辑:程序博客网 时间:2024/04/24 13:29
其中一二的方法,参考了网上的 关于“计算一个字节里(byte)里面有多少bit被置1”的思考 这篇文章
第一种,移数据
int fun1(int data)
{
int count=0; //计数
while(data)
{
count+=data&1; //检查Num最后一位是否为1
data>>=1;
}
return count;
}
没什么可解释的,但如果是个负数,可能会出问题
第二种,移1
int fun2(int data)
{
int count=0;
int bit_1=1;
while(bit_1)
{
if(data&bit_1)count++;
bit_1<<=1;
}
return count;
}
虽然不会出现什么问题,但是效率没有第一种高
第三种,与上自己减一的数
int fun3(int data)
{
int count=0;
while(x)
{
count++;
x = x & (x - 1);
}
return count;
}
1000 - 1 = 0111,正好是原数取反;
所以用这种方法来求1的个数是很效率很高的,不懂的敲一敲代码,就能明白了
int main()
{
printf("fun1 = %d\n",fun1(9999)); //循环会执行14次
printf("fun2 = %d\n",fun2(9999)); //循环会执行32次
printf("fun3 = %d\n",fun3(9999)); //循环会执行8次
return 0;
}
一下就能看出那个效率高了,第一种还有可能会死在负数,第二种效率低,第三种效率高
- 计算一个字节里面有多少bit被置1 ,三种算法
- 计算一个字节(byte)里有多少bit被置1
- 面试题:以最快的速度计算一个字节(byte)里有多少bit被置1
- 常见面试题——计算一个字节里有多少bit置1
- 计算一个字节里有多少位被置1
- 计算一个字节中有多少位被置为1
- 计算一个字节中有多少位被置1
- 一个关于计算整数bit位上有多少个1的算法
- 不用循环,计算一串数字里面有多少个1
- 计算n bit的整数中有多少bit 为1
- 算一个字(DWORD)里有多少bit被置1
- 计算一个整数的二进制表示有多少个1(别人的最快算法)
- 计算一个字节(8位)里面,1的个数
- 计算一个月里面有多少工作日和一年中的工作日
- 计算一个数的二进制形式有多少个1
- 计算一个整数有多少个1的函数
- 计算一个整数的二进制中有多少个1
- C#计算一个月有多少天
- CADisplayLink
- 关于使用curl 调用其他工程方法
- android经典DEMO
- Eclipse设置Instance variable的前缀
- MFC中, 子线程怎样访问控件
- 计算一个字节里面有多少bit被置1 ,三种算法
- hibernate持久化上下文
- 详细解析Java中抽象类和接口的区别
- Hadoop学习——HDFS数据备份与放置策略
- Arabic Numberal
- servlet 的生命周期
- d3 is not defined
- Hadoop状态页面的Browse the filesystem链接无效的问题
- HyperV网络设置问题