C++ 位集及其应用?

server side programmingprogramming

位集是一种存储多个布尔值的数据集,但与可以存储一系列位(如布尔数组或布尔向量)的其他数据集相比,它占用的内存空间较少。

位集以占用较少内存空间的形式存储二进制位,它以压缩形式存储它们。访问任何元素与其他元素相同,即使用其索引值,即 bitset_name[index]。但位集中元素的索引是相反的。让我们举个例子,对于位集 {01101001},第 0 个索引处的元素为 1,依此类推。因此 0 位于索引 1、2、4、7。 1 位于索引 0、3、5、6。

让我们创建一个使用位集所有函数的程序 −

示例

#include <bits/stdc++.h>
using namespace std;
#define setSize 32
int main() {
   bitset<setSize> bset1; // 值为 00000000000000000000000000000000000
   bitset<setSize> bset2(20); // 值为 000000000000000000000000000010100
   bitset<setSize> bset3(string("1100")); // 值为 0000000000000000000000000000001100
   cout<<"Bitset 的值为 :
" ;    cout<<"bitset 1 : "<<bset1<<endl;    cout<<"bitset 2 : "<<bset2<<endl;    cout<<"bitset 3 : "<<bset3<<endl;    cout << endl;    bitset<8> bset4; // 值为 00000000    bset4[1] = 1;    cout<<"更改一位后的值:"<<bset4<<endl;    bset4[4] = bset4[1];    cout <<"使用其他方法更改值:"<<bset4<<endl;    int numberofone = bset4.count();    int numberofzero = bset4.size() - numberofone;    cout<<"集合<<bset4<<"有<<numberofone<<"个1和<<<numberofzero<<"个0
";    cout<<"< bset4<<"的 bool 表示:";    for (int i = 0; i < bset4.size(); i++)       cout<< bset4.test(i)<<"";    cout<< endl;    if (!bset1.none())       cout << "bset1 设置了一些位
";       cout <<".set() 方法设置所有位,bset4.set() = "<< bset4.set() << endl;       cout<<"将特定位(4)更改为 0 <<<bset4.set(4, 0)<<endl;       cout<<<"将特定位 (4) 更改为 1 "<<bset4.set(4)<<endl;       cout<<<"重置位置 2 处的位 :"<<bset4.reset(2)<<endl;       cout<<<"重置完整位集的位 :"<<bset4.reset()<<endl;       cout<<<"翻转位置 2 处的位 :"<< bset4.flip(2) << endl;       cout<<"翻转数组的位:"<<bset4.flip()<< endl;       int num = 100;       cout << "
十进制数:" << num << " 二进制等价:" << bitset<8>(num);    return 0; }

输出

Bitset 的值如下:
Bitset 1:00000000000000000000000000000000000
Bitset 2:000000000000000000000000000010100
Bitset 3:000000000000000000000000000001100
更改一位后的值:00000010
使用其他方法更改值:00010010
set00010010 有 2 个 1 和 6 个 0
00010010 的 bool 表示:0 1 0 0 1 0 0 0
.set() 方法设置所有位,bset4.set() = 11111111
将特定位(4)更改为 0 11101111
将特定位(4)更改为 1 11111111
重置位置 2 处的位:11111011
重置完整位集的位:00000000
翻转位置 2 处的位:00000100
翻转数组的位:11111011
十进制数:100 二进制等价物:01100100

相关文章