[C++] bitset
bitset
#include<bitset>
bitset 对象的定义和初始化
定义bitset时,要明确bitset有多少位:
bitset<32> bitvec //32位二进制,初始化为0
对于负数,在存储是会以负数的补码形式存储。
bitset<10> haha(-20);
用unsigned 值初始化bitset 对象:
当用unsigned 值初始化bitset 对象时,该值将转化为二进制的位模式。
如果bitset类型长度大于 unsigned 值的二进制位数,则其余的高阶位将置为0;
如果bitset 类型长度小于unsigned 值的二进制位数,则只使用unsigned值中的低阶位,超过bitset类型长度的高阶位将被丢弃。
`bitset<16> bit(0xFFFF) //0~15位都置1'
'bitset<32> bit(0xFFFF) //015位置1,1631位置0`
用string对象初始化bitset对象
string strval("1100");
bitset<32> bit(strval);
注意:从string对象读入位集的顺序是从右向左。
即反向转化:string对象最右边的字符用来初始化bitset对象的低阶位(即下标为0的位)。
bit的位模式中第2和3位置为1,其余位置都为0。
如果string对象的字符个数小于bitset类型的长度,则高阶位将置为0。
不一定要把整个string对象都作为bitset的初始值,可以只用某个子串作为初始值:
string str("111111111100000000011011")
bitset<32> bit(str,5,4)
常用的成员函数:
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
os << b 把b中的位集输出到os流
reference
[STL容器之 bitset]{http://blog.csdn.net/htf15/article/details/7718712}
[bitset的使用]{http://blog.csdn.net/acm_10000h/article/details/40951033}