题目中要求执行效率要尽可能的高,我只想到了将除法改为位运算符来实现,还有很多没有考虑的地方。
下面通过几个程序来看这个问题:
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