#include <iostream>
using namespace std;
//方法1,不断地除, 复杂度lgV,并且除法并不是很高效
int getCount1(int v) {
int sum = 0;
while (v) {
sum += v%2;
v /= 2;
}
return sum;
}
//方法2,移位,复杂度:lgV
int getCount2(int v) {
int sum = 0;
while (v) {
sum += v&0x01;
v >>= 1;
}
return sum;
}
//方法3,利用判断2的乘方幂,复杂度之和1的个数有关, 复杂度:O(M)
int getCount3(int v) {
int sum = 0;
while (v) {
++sum;
v &= v - 1;
}
return sum;
}
//方法4和方法5都是用枚举的方法,典型的以空间换时间的方法,一个是用switch分支选择的方法,还是一个是用查表的方法,不再列出
int main() {
int v = 7;
cout << getCount1(v) << endl;
cout << getCount2(v) << endl;
cout << getCount3(v) << endl;
return 0;
}
[编程之美]求二进制中1的个数
最新推荐文章于 2019-10-07 20:41:33 发布