bit流中统计1的个数

一串bit流中统计1的个数

同事说了个方法很不错,学习了。

#pragma once
#include<iostream>
typedef unsigned char byte;

#define NEW_LINE "\r\n";

const static int bitMapSize=256;

byte bitMap[bitMapSize];

void InitBitMap(void)
{
bitMap[0]=0; //初始化第一个表值 0000 0000

int nowBitStart=0,nowStart=1,nowLength=2;

//根据第一个表值生成后面的所有表值
for(;nowLength<=bitMapSize;nowLength*=2)
{
for(;nowStart<nowLength;)
{
bitMap[nowStart++]=bitMap[nowBitStart++]+1;
}
nowStart=nowLength;
nowBitStart=0;
}
}

//计算byte流中1的个数
long CaculateBitCount(byte *byteFlow,long flowSize)
{
long bitCounter=0;
for(long i=0;i<flowSize;)
{
bitCounter+=long(bitMap[int(byteFlow[i++])]);
}
return bitCounter;
}

int main()
{
InitBitMap();
int test=14589526; //0000 0000 1101 1110 1001 1110 0101 0110 15个1
std::cout<<CaculateBitCount((byte *)(&test),sizeof(test))<<NEW_LINE;
std::cin.get();
return 0;
}

bitmap算法:

http://www.cnblogs.com/donj/archive/2010/08/29/1811906.html

原文地址:https://www.cnblogs.com/moonflow/p/2302409.html