标签:
#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