IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C和C++中的bitset -> 正文阅读

[C++知识库]C和C++中的bitset

前言

??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;			//声明一个长度为4bit的 bitset,默认每一位为 0.
bitset<8> b(12);		//声明一个长度为8bit的 bitset,存储数值12,内容为 0000 1100.
string s = "101100"	 	//bitset保存字符串时,字符串的内容只能包含 0 和 1.
bitset<8> c(s);			//声明一个长度为 8bit的bitset,存储字符串s,内容为 0010 1100.

【PS】

  1. 用字符串构造时,字符串只能包含01.
  2. 在进行有参构造时,若参数所需空间比bitset的空间小,则在前面补0.
  3. 在进行有参构造时,若参数所需空间比bitset的空间大,参数为整数时取后面部分,参数为字符串时取前面部分.
1.2 成员函数和使用方法
bitset<24> s(128);

//获取函数
s.count();			//返回s中1的个数
s.size();			//返回s的空间大小
s.test(2);			//检查下标为2的元素是否为1,1返回true, 0返回false
s.any();			//检查s中是否有1
s.none();			//检查s中是否没有1
s.all();			//检查s中是否全为1

//设置函数
s.flip();			//不传参则将s的每一位取反
s.flip(2);			//传参则将下标为2的位取反
s.set();			//不传参则将全部位数置1
s.set(3);			//传参则将下标为3的位数置1
s.set(3,0);			//传两个参数则将s的下标为3的位数置为0(第二个参数)
s.reset();			//不传参则将s的每一位置0
s.reset(3);			//传参则将下标为3的位数置为0
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 实现方法
//bitset类型声明
#define MAX_BIT_FLAG_SIZE  128
typedef  char bitset[MAX_BIT_FLAG_SIZE/8 + 8];

//bit枚举值定义
enum ReqDataEnum
{
	RQE_BIT_NUM1;
	REQ_BIT_NUM2;
	REQ_BIT_NUM3;
	REQ_BIT_NUM4;
	REQ_BIT_NUM5;
	...
	MAX_REQ_BIT = 127;
};

//设置和获取 bit位数值宏函数
#define ST_SET(bitset, index)		(bitset[(index)/8] |= (1UL<<((index)%8)))  //此处为a=a|b,不是异或
#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))  //此处返回BOOL值


//实际运用 bit集合位
typedef struct
{
	int num1;
	int num2;
	int num3;
	char num4;
	char num5;
	bitset st;
}SessionData;

SessionData user1;
ST_SET(user1.st, RQE_BIT_NUM1);
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:08:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:21:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码