8亿个整数存储

用int型存储占 2^32  * 4 / 1000 /1000/   =  4096 * 4 M

用位数组存储占 4096 * 4M /32 = 512M

#include <stdio.h>
#include <bitset>
#include <iostream>
using namespace std;

const unsigned int n = (-1 + 1024 * 1024 * 1024 * 4);

void set_b(char* a1, int v)
{
	char i_idx = v / 8;
	char b_idx = v % 8;
	a1[i_idx] = a1[i_idx] | (1 << b_idx); //将i_idx个字节的b_idx位置为1
}

void unset_b(char* a1, int v)
{
	char i_idx = v / 8;
	char b_idx = v % 8;
	a1[i_idx] = a1[i_idx] & ~(1 << b_idx);
}

void get_b(char* a1, int v, int flag)
{
	char i_idx = v / 8;
	char b_idx = v % 8;
	flag = a1[i_idx] & (1 << b_idx);//右移取值
	flag = flag >> b_idx; //左移输出

	std::cout << flag <<std::endl;
}

int main(int, char**)
{
	bitset<n> *b = new bitset<n>;
	if(b)
	{
		cout << b->size() << endl;
	}

	b->set(100);
	std::cout << (*b)[100] << std::endl;
	b->reset(100);
	std::cout << (*b)[100] << std::endl;

	delete b;

////////////////////////////////////////////////////////////////

	char* a = new char[n/8];
	for (int i = 0; i < n / 8; i++) a[i] = 0;
	
	int flag = 0;
	set_b(a, 127);
	get_b(a, 127, flag);
	get_b(a, 126, flag);
	unset_b(a, 127);
	get_b(a, 127, flag);
	delete a;

	return 0;
}

 

posted on 2014-11-11 16:57  kangbry  阅读(222)  评论(0编辑  收藏  举报

导航