bitset

1. 基本介绍

   std::bitset 是标准库中的一个存储 0/1 的大小不可变容器。严格来讲,它并不属于 STL。

   由于内存地址是按字节即 byte 寻址,而非比特 bit ,一个 bool 类型的变量,虽然只能表示 0/1 , 但是也占了 1 byte 的内存。

   bitset 就是通过固定的优化,使得一个字节的八个比特能分别储存 8 位的 0/1 。

   对于一个 4 字节的 int 变量,在只存 0/1 的意义下, bitset 占用空间只是其1/32,计算一些信息时,所需时间也是其1/32

   当然, vector 的一个特化 vector<bool> 的储存方式同 bitset 一样,区别在于其支持动态开空间。

 

2. 使用

   头文件及定义如下:

#include <bitset>
bitset<1000> bs;   // a bitset with 1000 bits

   构造函数

bitset()                  : 每一位都是 false
bitset(unsigned long val) : 设为 val 的二进制形式
bitset(const string& str) : 设为串 str

   运算符

operator []                : 访问其特定的一位
operator ==/!=             : 比较两个 bitset 内容是否完全一样
operator &/&=/|/| =/^/^=/~ : 进行按位与/或/异或/取反操作。 bitset 只能与 bitset 进行位运算 ,若要和整型进行位运算,要先将整型转换为 bitset
operator <</>>/<<=/>>=     : 进行二进制左移/右移
operator <</>>             : 流运算符,这意味着你可以通过 cin/cout 进行输入输出

   成员函数

count()              : 返回 true 的数量
size()               : 返回 bitset 的大小。
test(pos)            : 它和 vector 中的 at() 的作用是一样的,和 [] 运算符的区别就是越界检查
any()                : 若存在某一位是 true 则返回 true ,否则返回 false
none()               : 若所有位都是 false 则返回 true ,否则返回 false
all()                : C++11 ,若所有位都是 true 则返回 true ,否则返回 false
set()                : 将整个 bitset 设置成 true
set(pos, val = true) : 将某一位设置成 true / false
reset()              : 将整个 bitset 设置成 false
reset(pos)           : 将某一位设置成 false 。相当于 set(pos, false)
flip()               : 翻转每一位,相当于异或一个全是1的 bitset
flip(pos)            : 翻转某一位。
to_string()          : 返回转换成的字符串表达。
to_ulong()           : 返回转换成的 unsigned long 表达
to_ullong()          : C++11 ,返回转换成的 unsigned long long 表达。

  

  

原文链接: https://www.cnblogs.com/yanghh/p/12944450.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    bitset

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350425

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:19
下一篇 2023年3月2日 上午6:20

相关推荐