题目中要求执行效率要尽可能的高,我只想到了将除法改为位运算符来实现,还有很多没有考虑的地方。
下面通过几个程序来看这个问题:
1.最简单的程序
#include <iostream>
using namespace std;
int main()
{
unsigned int b_num;
int i_count=0;
cout<<"请输入一个1~256之间的整数"<<endl;
cin>>b_num;
while(b_num != 0)
{
if(b_num%2 != 0)
{
i_count++;
}
b_num /=2;
}
cout<<i_count<<endl;
}
2, 改进方案,将其中的算法运算都改为位运算
(1)其中求模操作就是为了看二进制的最后一位是否为1,可以与1进行与操作就可以判断最后一位是不是1了
(2)除法运算改为右移位运算,进行完移位操作不要忘记赋值
改进的程序如下:
#include <iostream>
using namespace std;
int main()
{
unsigned int b_num;
int i_count=0;
cout<<"请输入一个1~256之间的整数"<<endl;
cin>>b_num;
while(b_num)
{
i_count += (b_num&1);
b_num>>=1;
}
cout<<i_count<&l

这篇博客探讨了如何高效地计算一个8位字节变量中二进制表示中1的个数,强调执行效率。文章通过比较几种方法,包括位运算优化、空间换时间策略等,并分析了各种方法的时间复杂度。还提出了扩展问题,如32位变量的情况以及计算两个正整数位差异的方法。
最低0.47元/天 解锁文章
的变量,求二进制表示中1”的个数,要求算法的执行效率尽可能的高&spm=1001.2101.3001.5002&articleId=20897737&d=1&t=3&u=ec3027c3bdff47af88990be7018ff635)
1904

被折叠的 条评论
为什么被折叠?



