bitset

Posted on 2020-04-22 21:04  __wxyz  阅读(208)  评论(0)    收藏  举报

bitset

博客:https://www.cnblogs.com/zwfymqz/archive/2018/04/02/8696631.html

https://www.cnblogs.com/magisk/p/8809922.html

头文件:

#include < bitset >

定义 :

bitset <20> b, 其中, 20 为 bitset的大小, b为变量名

与数组不同的是, 数组是从左至右依次标号为0~n, 而bitset是从右至左依次标号为0~n, 参考二进制数

初始化, 赋值 :

用string, char[], 数值, 还有 直接像数组一样赋值都可, 但是string、char[], 数值, 在赋值的时候, 如果超过了位数, 保存的情况会不同,

假如bitset的大小设置为 : bitset<3>,

string和char[]都是取前 3 位, 而数值则是取二进制数的后三位

特殊地, 数值赋值是可以简单看做将一个数转换成二进制数后存进bitset里, 不足位用0补足, 但是用string和char[]赋值时, string和char[]是从左至右, 而bitset是从右至左, 这时就相当于将string或char[]整体不改变左右顺序地扔进bitset里, 从右端开始占满连续的一段, 如下

对于 char s[] = '101010'

bitset<10> bit (s);

bit : 0000101010

也就是说, s 中的最高位s[5], 是 bit中的最低位bit[0], 而s 中的最低位 s[0], 是bit 中的最高位 bit[5], (不足位也是用0补足)

运算

就可以看做是一个二进制数, 所有位运算都支持

函数

对于一个叫做bit的bitset:

bit.size() 返回大小(位数)

bit.count() 返回1的个数

bit.any() 返回是否有1

bit.none() 返回是否没有1

bit.set() 全都变成1

bit.set(p) 将第p + 1位变成1(bitset是从第0位开始的!)

bit.set(p, x) 将第p + 1位变成x

bit.reset() 全都变成0

bit.reset(p) 将第p + 1位变成0

bit.flip() 全都取反

bit.flip(p) 将第p + 1位取反

bit.to_ulong() 返回它转换为unsigned long的结果,如果超出范围则报错

bit.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错

bit.to_string() 返回它转换为string的结果