这个题目很好的考察了关于位的操作下面提供两种思路,编程之美上面的思路很有代表性:
// Count1--01.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int coutn1(int num)
{
int result = 0;
while (num)
{
result+=num&0x01;//如果是1的话,整个个数加1,如果是0的话,那么就是+0;这样就可以知道二进制中1的个数了
num>>=1;
}
return result;
}
int coutn102(int num)//编程之美上面介绍的很好的方法
{
int result=0;
while (num)
{
num&=(num-1);
result++;
}
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<coutn1(10000)<<endl;
cout<<coutn1(10000)<<endl;
system("pause");
return 0;
}
-------------------------------------------------华丽的分割线----------------------------------------------------
// Count1--01.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int coutn1(int num)
{
int result = 0;
while (num)
{
result+=num&0x01;//如果是1的话,整个个数加1,如果是0的话,那么就是+0;这样就可以知道二进制中1的个数了
num>>=1;
}
return result;
}
int coutn102(int num)//编程之美上面介绍的很好的方法
{
int result=0;
while (num)
{
num&=(num-1);
result++;
}
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout<<coutn1(10000)<<endl;
cout<<coutn1(10000)<<endl;
system("pause");
return 0;
}
本文深入探讨了位操作在编程中的应用,并提供了两种高效计算二进制中1的个数的方法,包括经典方法和改进版算法。通过实例分析,展示了如何利用位运算优化代码性能。
875

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



