标签:
#define INTBITS 4 #define MAXMUM 10 #define BITS (MAXMUM*INTBITS-1)/CHAR_BIT+1 char arr[BITS];
#define SHIFT 1 //log_2(CHAR_BIT/INTBITS) = 1
#define MASK 0x1 //截取最后一位
void incBit(char *bit, int i)
{
bit[ i>>SHIFT ] += 1<< ((i&MASK)*INTBITS );
}#define MASK2 0xf //保留所得结果的最后4位
int compareBit(char *bit, int i)
{
return (bit[ i>>SHIFT ] >> ((i&MASK)*INTBITS) & MASK2);
}
#include <iostream>
#define INTBITS 4
#define SHIFT 1
#define MASK 0x1
#define MASK2 0xf
#define MAXMUM 10
#define BITS (MAXMUM*INTBITS-1)/CHAR_BIT+1
using namespace std;
//用于统计整数i出现的频数
void incBit(char *bit, int i)
{
bit[ i>>SHIFT ] += 1<<( ( i & MASK ) * INTBITS );
}
//用于提取统计结果
int compareBit(char *bit, int i)
{
return ( bit[ i>>SHIFT ] >> ( ( i&MASK ) * INTBITS ) & MASK2 );
}
int main()
{
char arr[BITS];
int test[8] = { 8, 1, 4, 5, 8, 5, 7, 4};
for(int i=0; i<BITS; i++){
arr[i] = 0;
}
for(int i=0; i<8; i++){
incBit(arr, test[i]);
}
for(int i=0; i<MAXMUM; i++){
int countNum = compareBit(arr, i);
if(countNum>0){
cout<<i<<"; "<<countNum<<endl;
}
}
return 0;
}标签:
原文地址:http://blog.csdn.net/zgzzbws/article/details/51356749