首页 > 编程语言 >C++ 中的 bitset

C++ 中的 bitset

时间:2023-03-04 23:13:05浏览次数:40  
标签:返回 false textsf C++ bitset BS true

C++ 中的 \(\textsf{bitset}\) 是能够存储 \(01\) 的容器,这一点看似与布尔(bool)数组很像。而一个布尔类型将会占用 \(1\) 字节的空间,相对于 \(\textsf{bitset}\) 来讲 \(1\) 字节的空间将可以存储 \(8\) 位的 \(01\)。

使用 \(\textsf{bitset}\)

和一般的 STL 一样,需要一个特定的头文件进行引用,但是它并不属于 STL 的哪一类。

#include <bitset>

$ $


\(\textsf{bitset}\) 的相关使用

1、定义

bitset <10010> BS; //10010 作为bitset的大小,下标从0开始算起,BS中都为0

bitset <10010> BS(val); //同样是 10010 位的bitset,而bitset中以及有了 val 的二进制数
                        // 例如,bitset <4> BS(3) 中BS的值为 0011

const string str = "101"; // str 作为一个【字符串常量】是一个01串!
bitset <10010> BS(str); // 例如,str = "101", bitset <4> BS(str) 中BS的值为 0101

bitset <10010> BS(string("101"));// 或者也可以这样写 

对于整数来说,当 \(\textsf{bitset}\) 的大小小于 \(\textsf{val}\) 的值得时候,会只存入 \(\textsf{val}\) 的后面的二进制数,就像是 \(9(2) = 1001\), 而 bitset <3> BS 中的元素仅会是 \(001\)。

对与字符串来说,恰恰相反:const string str = "110101";

bitset <6> BS; // BS的值为 110101
bitset <5> BS; // BS的值为 11010
bitset <4> BS; // BS的值为 1101  ...

它是从前往后存的。

还有,bitset <10010> BS(0)bitset <10010> BS,均可使初始化为 \(0\)。


$ $

2、运算

  • \(\textsf{bitset}\) 能与数组一样将每个元素进行调用,例如:当BS的值为 \(010110\) 时,BS[0] = 0, BS[1] = 1, BS[2] = 1, BS[3] = 0, BS[4] = 1, BS[5] = 0}

  • \(\textsf{bitset}\) 可以用于 &、|、^、~、&=、|=、^=、>>、<<、>>=、<<= 的各种逻辑、位运算操作,但是两个对象仅能为 \(\textsf{bitset}\)。
    若两个 \(\textsf{bitset}\) 的大小不一样,那么这两个 \(\textsf{bitset}\) 是无法做到位运算的。
    对于左移右移超过了其最大位,也只会保留最后的没有超过的位数。

  • \(\textsf{bitset}\) 可以用 ==、!= 与其他变量进行比较,返回 false/true。(与实数比较时,会默认将实数当做整数比较)

  • \(\textsf{bitset}\) 流运算符,这意味着你可以通过 cin/cout 进行输入输出。


$ $

3、成员函数

使用 作用
BS.count() 返回 true 的数量
BS.any() 若存在某一位是 true 则返回 true,否则返回 false
BS.none() 若所有位都是 false 则返回 true,否则返回 false
BS.all() 若所有位都是 true 则返回 true,否则返回 false
BS.size() 返回 bitset 的大小
BS._Find_first() 返回 bitset 第一个 true 的下标,
若没有 true 则返回 bitset 的大小
BS._Find_next(pos) 返回 pos 后面(严格)第一个 true 的下标,
pos 后面没有 true 则返回 bitset 的大小
使用 作用
BS.set() 将整个 bitset 设置成 true
BS.set(pos,true/false) 将某一位设置成 true/false
BS.reset() 将整个 bitset 设置成 false
BS.reset(pos) 将某一位设置成 false。相当于 set(pos, false)
BS.flip() 翻转每一位,相当于异或一个全是 \(1\) 的 bitset
BS.flip(pos) 翻转某一位
使用 作用
BS.to_string() 返回转换成的字符串表达
BS.to_ulong() 返回转换成的 unsigned long 表达
BS.to_ullong() 返回转换成的 unsigned long long 表达

标签:返回,false,textsf,C++,bitset,BS,true
From: https://www.cnblogs.com/Cnghit/p/17178374.html

相关文章

  • TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
    距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是......
  • 最大前缀和C++
    //给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。#include<iostream>usingnamespacestd;constintN=2e5+10;//注意全局常量必须在前面添加c......
  • C/C++ 数据结构堆结构算法的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//堆的算法实现#defineDEFAULT_CAPCITY128typedefstruct_Heap{int*arr;//存储堆元素的数组......
  • 河北工程806c/c++程序设计2013年-2021年编程题
    ps:都是自己练习写的,可能不是最好的写法,但是都运行过,能跑起来。2021年1.从键盘上输入一元二次方程(ax2+bx+c=0)的系数:a,b,c;计算并输出方程的根,如果没有实根则输出“No......
  • 【C++随记】浅谈编译与链接
    原文网址:https://zhuanlan.zhihu.com/p/518831355本文讨论的内容来自于仕琪老师的课程:C/C++从基础语法到优化策略课程地址:[C++](快速学习C和C++,基础语法和优化策略,学了不......
  • C++编译错误、运行错误、链接错误小结
    原文网址:https://blog.csdn.net/Thera_qing/article/details/100740389一、运行错误运行错误是什么运行错误是指代码逻辑无措,由于编译器无法发现运行时错误,这些错误往往......
  • C/C++ 数据结构优先级队列的实现(使用二级指针)
    #include<iostream>#include<Windows.h>#include<iomanip>//优先级队列的实现usingnamespacestd;#defineMaxSize5typedefintDataType;//队列中的元素类型......
  • hash表 C++的使用以及理解
    hash表C++的使用以及理解1、哈希表定义哈希表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置......
  • ROS服务通信(C++)
    ROS服务通信C++效果图结构总览友情提醒每一步编辑完,执行一下Ctrl+Shift+B进行编译,及时排查错误准备工作第一步:创建工作空间配置:roscpprospystd_msgsd......
  • [C/C++] noexcept:承诺函数不抛出异常
    noexcept是新标准(C++11)引入的,其作用是我们承诺一个函数不抛出异常。标准库知道我们的函数不会抛出异常,就不会认为“函数可能会抛出异常”,而为这种可能性做一些额外的工作;......