博客:https://www.cnblogs.com/zwfymqz/archive/2018/04/02/8696631.html
https://www.cnblogs.com/magisk/p/8809922.html
头文件:
定义 :
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的结果,如果超出范围则报错
浙公网安备 33010602011771号