#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
// 100W 个数,每个数是 unsigned int 类型,大小随机,有重复,排序
#define NUM_COUNT 1000000
#define NUM_MAX 0xFFFFFFFF
#define BIT(n) ((u8)0x8 >> (n)) //由于bit位的使用是任意的,随便你怎么使用,只要set 和 get一致即可
typedef unsigned int u32;
typedef unsigned char u8;
u32 arr[NUM_COUNT];
void setBit(u32 idx, char* p)
{
p[idx / 4] |= BIT(idx % 4);
}
u8 getBit(u32 idx, char* p)
{
u8 temp = p[idx / 4];
return temp & BIT(idx % 4);
}
int main(void)
{
unsigned int size = NUM_MAX / 4 + 4;
char *p = (char*)malloc(sizeof(u8) * size);
memset(p,0,sizeof(u8) * size);
assert(p != NULL);
for(int i=0; i<NUM_COUNT; i++)
{
arr[i] = (u32)random();
setBit(arr[i], p);
//printf("%d, %d \n ", arr[i], getBit(arr[i], p));
}
printf(" init ok. \n ");
u32 count = 0;
for(unsigned int i=0; i<NUM_MAX; i++)
{
if(getBit(i, p) > 0)
{
count++;
if(count >= NUM_COUNT)
break;
}
}
printf("count = %d \n ", count);
return 0;
}