[编程之美]求二进制中1的个数

来源:互联网 发布:seo房地产关键字 编辑:程序博客网 时间:2024/06/09 20:08
#include <iostream>using namespace std;//方法1,不断地除, 复杂度lgV,并且除法并不是很高效int getCount1(int v) {  int sum = 0;  while (v) {    sum += v%2;    v /= 2;  }  return sum;}//方法2,移位,复杂度:lgVint 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;}