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;
}
本博客内容均来自网络,如有雷同,是我抄袭!
浙公网安备 33010602011771号