转自 bitset大法好
bitset存储二进制数位。
bitset就像一个bool类型的数组一样,但是有空间优化。
bitset中的每个元素都能单独被访问,例如对于一个叫做a的bitset,表达式a[3]访问了它的第4个元素,就像数组一样。
(但是输出单独访问结果不能用printf,和bitset有关的输出都用cout)
另外bitset的大小在编译时就需要确定,也就是说bitset<>的尖括号中写的是大小。
#include <iostream>
#include <bitset>
using namespace std;
bitset<32> a(string("11111"));//注意是右对齐
bitset<2> b(string("10101"));//过长从头开始取
bitset<32> c(16);//保存进一个int的常用写法
int main(){
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
bitset的运算就像一个普通的整数一样,可以进行与(&)、或(|)、异或(^)、左移(<<)、右移(>>)操作。
初始化bitset对象的方法
bitset b;
b有n位,每位都为0
bitset b(u);
b是unsigned long型u的一个副本
bitset b(s);
b是string对象s中含有的位串的副本
bitset b(s, pos, n);
b是s中从位置pos开始的n个位的副本
bitset操作
b.any()
b中是否存在置为1的二进制位?
b.none()
b中不存在置为1的二进制位吗?
b.count()
b中置为1的二进制位的个数
b.size()
b中二进制位的个数
b[pos]
访问b中在pos处的二进制位
b.test(pos)
b中在pos处的二进制位是否为1?
b.set()
把b中所有二进制位都置为1
b.set(pos)
把b中在pos处的二进制位置为1
b.reset()
把b中所有二进制位都置为0
b.reset(pos)
把b中在pos处的二进制位置为0
b.flip()
把b中所有二进制位逐位取反
b.flip(pos)
把b中在pos处的二进制位取反
b.to_ulong()
用b中同样的二进制位返回一个unsigned long值
os << b
把b中的位集输出到os流