前言
??C语言 中没有bool 类型,通常会使用整形值表示bool 类型,占内存较多。C++ 中有bool 且推出了bitset 类库来,可以使用一个bit位来表示一个数据的bool 类型,本文将有所介绍。 ??另外在C语言 中借助字符数组或整形值数组,同样可自己表示出bitset 的机制。
一. C++中的bitset简述
1.1 头文件
??bitset 是C++中的一个类库,它可以管理到具体的每一个bit 位,但又能存储一个具体的整型值或者字符串。其有很多成员函数能够很容易的获取到我们想要的内容。 ??其中管理bit 位可能是我们想要的重点内容。
#include <bitset>
1.2 声明定义
bitset<4> a;
bitset<8> b(12);
string s = "101100"
bitset<8> c(s);
【PS】
- 用字符串构造时,字符串只能包含
0 和1 . - 在进行有参构造时,若参数所需空间比
bitset 的空间小,则在前面补0. - 在进行有参构造时,若参数所需空间比
bitset 的空间大,参数为整数时取后面部分,参数为字符串时取前面部分.
1.2 成员函数和使用方法
bitset<24> s(128);
s.count();
s.size();
s.test(2);
s.any();
s.none();
s.all();
s.flip();
s.flip(2);
s.set();
s.set(3);
s.set(3,0);
s.reset();
s.reset(3);
1.3 转换函数
bitset<8> t("11001001");
string s = t.to_string();
unsigned long a = t.to_ulong();
unsigned long long b = t.to_ullong();
二、C语言基于数组实现bitset
2.1 逻辑思路
2.2 实现方法
#define MAX_BIT_FLAG_SIZE 128
typedef char bitset[MAX_BIT_FLAG_SIZE/8 + 8];
enum ReqDataEnum
{
RQE_BIT_NUM1;
REQ_BIT_NUM2;
REQ_BIT_NUM3;
REQ_BIT_NUM4;
REQ_BIT_NUM5;
...
MAX_REQ_BIT = 127;
};
#define ST_SET(bitset, index) (bitset[(index)/8] |= (1UL<<((index)%8)))
#define ST_CLEAR(bitset, index) (bitset[(index)/8] &= ~(1UL<<((index)%8)))
#define ST_IS_SET(bitset, index) (bitset[(index)/8] & (1UL<<((index)%8)))
#define ST_IS_SET_RET_BOOL(bitset, index) ( ((bitset[(index)/8] & (1UL<<((index)%8)))) >>((index)%8))
typedef struct
{
int num1;
int num2;
int num3;
char num4;
char num5;
bitset st;
}SessionData;
SessionData user1;
ST_SET(user1.st, RQE_BIT_NUM1);
|