前言:今天碰见了这个操作,发现在状态压缩的时候特别好用,就整理一下吧。


bitset 就相当于一个 只能存储二进制,也就是 0 和 1 的 bool 数组
但是可以直接当作一个数进行左移右移,取或取反等二进制操作

如果直接用 bool 数组存储二进制每一位的话,n 位存储复杂度为 O(n),但是用 bitset 的话复杂度会减少到 O(n/32)。

所以一般用二进制状态压缩时就会用 bitset


一、定义:

对于 bitset 的定义有四种方式:
1、直接定义,每一位初始为0:
bitset<N> name; // 定义长度为 N 的二进制数组,命名为 name;

bitset<8> b1;
cout << b1 <<endl;

2、存储数字的二进制:
bitset<N> name(num); // 定义长度为 N 的二进制数组,命名为 name,将数字 num 的二进制存到其中;

bitset<8> b2(12); //二进制长度8,将12转化为二进制存到其中。
cout << b2 << endl;

3、存储 01字符串 对应的二进制:
bitset<N> name(string); // 定义长度为 N 的二进制数组,命名为 name,将01串 string 存到其中,长度不够前补 0,长度过长截断

string s = "10010";
bitset<8> b3(s);
cout << b3 << endl;

4、存储 01字符数组 中的二进制:
bitset<N> name(char[]); // 定义长度为 N 的二进制数组,命名为 name,将 01字符数组存到其中,长度不够前补0,长度过长截断

char chs[10] = "10010";
bitset<8> b4(chs);
cout << b4 << endl;

注意:
直接输出 bitset 为正常的二进制,但是遍历所有位置来输出的话就是逆序的:

bitset<8> bs(13);
cout << bs <<endl; //00001101
for(int i=0;i<7;i++) cout<<bs[i]; //10110000

二、常用操作:

  1. 像数字一样进行 取或 或者 左移右移:
b2 |= b3; //两个二进制数取或操作;
b2 &= b3; //两个二进制数取与操作;
b2 ^= b3; //取异或;
b2 = ~b2; //取反;
b2 <<= 2; //左移右移;
  1. 自带函数:
int cnt_1 = b2.count(); //查询二进制数组中,1的个数;
int len  = b2.size(); //二进制数组的长度,就是定义的长度;
int test = b2.test(7); //判断第x个位置是0还是1,也就是输出第x个位置,注意逆序;b2.flip(); //将二进制每一位取反;
b2.flip(3); //将二进制第x位取反;
b2.set(); //将二进制每一位置为1; reset置为0;
b2.set(3); //将第x个位置置为1;string ss = b2.to_string(); //将二进制数组转化为字符串。

bitset——定义及常用操作。相关推荐

  1. Python字符串的定义与常用操作

    1.用于储存小量的数据 2.python中用' '," ",''' ''',""" """括起来的就是字符串 3.常用操 ...

  2. java web定义数组_Java基础之数组--数组常用操作

    3.2一维数组 3.2.1声明数组 数组类型[] 数组名称:int[] username; 或者 数组类型 数组名称[];int username[]; 3.2.2初始化一维数组 一维数组初始化有两种 ...

  3. 前端JavaScript——js声明定义数组及常用操作

    数组的声明: 1.在js中,数组的声明不需要指定其长度 2.在js中,数组可以存放不同类型的数据(一般要求数据中采访同类型的数据) js定义数组: 空数组 一般常用这种形式,数组元素的定义使用[] v ...

  4. TensorFlow常用操作:代码示例

    1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...

  5. 用Python轻松搞定Excel中的20个常用操作

    来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...

  6. 【node】Sequelize常用操作、基本增删改查

    [node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...

  7. phoenix的元数据一般存在哪里_Phoenix常用操作记录-阿里云开发者社区

    Apache Phoenix 常用操作 基础知识 1****.****Phoenix 主要技术点 a.将SQL转化为HBase Scan,将结果封装为JDBC Result Set. b.表的元数据保 ...

  8. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  9. [PY3]——内置数据结构(3)——字符串及其常用操作

    字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...

  10. pythonlist基本操作_Python list 常用操作

    Python list 常用操作 1.list 定义 >>> li = ["a", "b", "mpilgrim", &q ...

最新文章

  1. cnblogs url temp
  2. chrome浏览器插件开发
  3. 项目: 写一个开头的界面 【c++ / c】
  4. HTTP 错误 500.19 - Internal Server Error
  5. next.js 简单使用
  6. java 正则 最后一个字符_正则表达式怎么匹配字符串中最后一串数字?
  7. service 层 拼接的html 代码如何直接返回_软件系统的分层,有效降低层与层之间的依赖...
  8. python有哪些用途-Python是什么 Python的用处
  9. 优达学城 python 人工智能入门_深度学习TensorFlow入门资源汇总-如何从零开发人工智能...
  10. python获取像素值_从PIL获取像素值列表
  11. 图片加载oom以及photoView缩放崩溃问题
  12. 波浪能及波能流的推导
  13. (VQA)LRTA: A Transparent Neural-Symbolic Reasoning Framework with Modular Supervision for Visual Que
  14. 初始化DirectX遇到的问题
  15. 清华一日游-恰逢清华大学99周年校庆
  16. 解决HTML、PHP乱码问题
  17. [Python机器学习]Nagel-Schreckenberg(交通流)模型
  18. 剪纸游戏 (SG函数)
  19. 集装箱 扩展程序_工厂一平米集装箱公厕销售,供求信息
  20. python生成CAPTCHA验证码图像实战、生成中文(汉子)CAPTCHA验证码图像

热门文章

  1. 1.6 Go语言适合做什么
  2. B站视频搬运项目,宅男必选!
  3. linux限制用户登录失败次数
  4. 华为模拟器eNSP练习题 - VLAN综合实验
  5. Replugin源码及原理深度剖析--唯一Hook点原理
  6. (阿里云笔记)阿里云域名ICP备案全流程——超详细
  7. http://baiy.cn/doc/cpp/index.htm#代码风格与版式_函数
  8. 用计算机怎样搜wifi网,笔记本电脑搜索不到无线网络(Wifi)怎么办
  9. 快速实现ARM和DSP的通信和协同工作
  10. 文档服务器拓扑图,服务器网络结构拓扑图