C和C++中的bitset
admin
2024-04-01 15:52:47
0

文章目录

      • 前言
        • 一. C++中的bitset简述
          • 1.1 头文件
          • 1.2 声明定义
          • 1.2 成员函数和使用方法
          • 1.3 转换函数
        • 二、C语言基于数组实现bitset
          • 2.1 逻辑思路
          • 2.2 实现方法

前言

  C/C++中没有bool类型,使用整形值表示bool类型占内存较多。C++中推出了bitset类库来,可以使用一个bit位来表示一个数据的bool类型,本文将有所介绍。
  另外在C语言中借助字符数组或整形值数组,同样可自己表示出bitset的机制。


一. C++中的bitset简述

1.1 头文件

  bitset是C++中的一个类库,它可以管理到具体的每一个bit位,但又能存储一个具体的整型值或者字符串。其有很多成员函数能够很容易的获取到我们想要的内容。
  其中管理bit位可能是我们想要的重点内容。

#include 
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);

相关内容

热门资讯

上节育环后需要注意什么 一、休息与活动 上节育环后要适当休息,避免剧烈运动和重体力劳动,一般建议休息1 - 2天。因为过早进...
挖矿收益不足3美分!比特币暴跌... 来源:环球市场播报 TMG Core 展台的液体浸没式冷却矿槽中的加密货币矿机。 罗森布拉特证券公...
众机构唱多三星电子:存储巨头冲... 财联社2月25日讯(编辑 史正丞)随着三星电子周二收涨3.6%,迈上每股20万韩元的历史新高,分析师...
增值税发票数据显示:春节假期消... 新华社北京2月24日电(记者刘开雄)记者2月24日从国家税务总局获悉,增值税发票数据显示,2026年...
从“向外求索”到“向内安顿”的... 从“向外求索”到“向内安顿”的消费觉醒 当商务宴席上的茅台与书房中静静摆放的谦夫子养生露酒同时出现在...
千寻智能完成近20亿元融资 北京商报讯(记者 陶凤 王天逸)2月24日,具身智能头部企业千寻智能宣布,近日连续完成两轮融资,金额...
原创 银... 最近不少人发现,家附近的银行网点悄悄关门了,有的贴出公告终止营业,有的直接撤柜清空,就连工商银行、建...
美联储理事库克称央行可能无法应... 来源:环球市场播报 美联储理事丽莎·库克警告称,美国央行可能无法应对因采用人工智能而导致的失业率上升...
焦点访谈|这个春节假期,消费市... 来源:滚动播报 (来源:千龙网) 金马昂首,新春纳福。刚刚过去的丙午年春节假期,消费市场购销两旺持续...
亚朵节后价格“跳水”超70% 春节过后,部分热门小城的亚朵酒店房价上演“过山车”行情,房价节前飙升,节后迅速跳水,巨大的价格波动引...
原创 金... 你绝对想不到,同样一克999足金,在深圳水贝批发市场只要1334元,走进周大福门店却变成1545元,...
德兰明海冲击港交所!递表前大手... 又一家储能企业“叩响”了港交所大门。近期,港交所官网显示,中小型用户侧储能企业深圳市德兰明海新能源股...
绿茶集团、猫眼娱乐发布正面盈利... |2026年2月25日 星期三| NO.1绿茶集团发布正面盈利预告 2月24日港股收市后,绿茶集团(...
安宁市的历史文化及名人有哪些 安宁市,这座坐落在彩云之南的城市,宛如一颗璀璨明珠,散发着迷人的历史文化魅力。在这里,岁月留下了深深...
中国央行连续12个月加量续作M... 来源:中国新闻网 中新社北京2月24日电 (陶思阅)中国央行24日发布中期借贷便利(MLF)招标公告...
不是15%?特朗普10%全球关... 据美国海关及边境保卫局(CBP)发布消息,特朗普政府将实施的新全球关税为10%。 第一财经收到的CB...
2026年春节出游人次、消费金... 2026年春节,为期9天的超长假期点燃了全国消费热情,多项核心数据创下历史纪录。 经文化和旅游部数据...
美国联邦存款保险公司(FDIC... 美国联邦存款保险公司(FDIC):美国银行业存款季环比下滑2%。
2026春节AI大战深度复盘:... 主编温静导读:2026年春节,元宝、千问、豆包三大巨头以红包、免单为杠杆,发动了一场规模空前的用户争...