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