bitset——定义及常用操作。
前言:今天碰见了这个操作,发现在状态压缩的时候特别好用,就整理一下吧。
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
二、常用操作:
- 像数字一样进行 取或 或者 左移右移:
b2 |= b3; //两个二进制数取或操作;
b2 &= b3; //两个二进制数取与操作;
b2 ^= b3; //取异或;
b2 = ~b2; //取反;
b2 <<= 2; //左移右移;
- 自带函数:
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——定义及常用操作。相关推荐
- Python字符串的定义与常用操作
1.用于储存小量的数据 2.python中用' '," ",''' ''',""" """括起来的就是字符串 3.常用操 ...
- java web定义数组_Java基础之数组--数组常用操作
3.2一维数组 3.2.1声明数组 数组类型[] 数组名称:int[] username; 或者 数组类型 数组名称[];int username[]; 3.2.2初始化一维数组 一维数组初始化有两种 ...
- 前端JavaScript——js声明定义数组及常用操作
数组的声明: 1.在js中,数组的声明不需要指定其长度 2.在js中,数组可以存放不同类型的数据(一般要求数据中采访同类型的数据) js定义数组: 空数组 一般常用这种形式,数组元素的定义使用[] v ...
- TensorFlow常用操作:代码示例
1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...
- 用Python轻松搞定Excel中的20个常用操作
来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...
- 【node】Sequelize常用操作、基本增删改查
[node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...
- phoenix的元数据一般存在哪里_Phoenix常用操作记录-阿里云开发者社区
Apache Phoenix 常用操作 基础知识 1****.****Phoenix 主要技术点 a.将SQL转化为HBase Scan,将结果封装为JDBC Result Set. b.表的元数据保 ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- [PY3]——内置数据结构(3)——字符串及其常用操作
字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...
- pythonlist基本操作_Python list 常用操作
Python list 常用操作 1.list 定义 >>> li = ["a", "b", "mpilgrim", &q ...
最新文章
- cnblogs url temp
- chrome浏览器插件开发
- 项目: 写一个开头的界面 【c++ / c】
- HTTP 错误 500.19 - Internal Server Error
- next.js 简单使用
- java 正则 最后一个字符_正则表达式怎么匹配字符串中最后一串数字?
- service 层 拼接的html 代码如何直接返回_软件系统的分层,有效降低层与层之间的依赖...
- python有哪些用途-Python是什么 Python的用处
- 优达学城 python 人工智能入门_深度学习TensorFlow入门资源汇总-如何从零开发人工智能...
- python获取像素值_从PIL获取像素值列表
- 图片加载oom以及photoView缩放崩溃问题
- 波浪能及波能流的推导
- (VQA)LRTA: A Transparent Neural-Symbolic Reasoning Framework with Modular Supervision for Visual Que
- 初始化DirectX遇到的问题
- 清华一日游-恰逢清华大学99周年校庆
- 解决HTML、PHP乱码问题
- [Python机器学习]Nagel-Schreckenberg(交通流)模型
- 剪纸游戏 (SG函数)
- 集装箱 扩展程序_工厂一平米集装箱公厕销售,供求信息
- python生成CAPTCHA验证码图像实战、生成中文(汉子)CAPTCHA验证码图像
热门文章
- 1.6 Go语言适合做什么
- B站视频搬运项目,宅男必选!
- linux限制用户登录失败次数
- 华为模拟器eNSP练习题 - VLAN综合实验
- Replugin源码及原理深度剖析--唯一Hook点原理
- (阿里云笔记)阿里云域名ICP备案全流程——超详细
- http://baiy.cn/doc/cpp/index.htm#代码风格与版式_函数
- 用计算机怎样搜wifi网,笔记本电脑搜索不到无线网络(Wifi)怎么办
- 快速实现ARM和DSP的通信和协同工作
- 文档服务器拓扑图,服务器网络结构拓扑图