转自: http://blog.csdn.net/lbird/article/details/1605833
bitset 类简化了位集的处理,有些程序要使用二进制位的有序集来保存一组项或条件的标志位,可以考虑使用bitset。
需要的文件:
#include <bitset>
Using std::bitset
l bitset 对象的定义和初始化
定义bitset时,要明确bitset有多少位:
bitset<32> bitvec // 32位二进制,初始化为0,0~31
用unsigned 值初始化bitset 对象:
当用unsigned 值初始化bitset 对象时,该值将转化为二进制的位模式。如果bitset类型长度大于 unsigned 值的二进制位数,则其余的高阶位将置为0;如果bitset 类型长度小于unsigned 值的二进制位数,则只使用unsigned值中的低阶位,超过bitset类型长度的高阶位将被丢弃。
bitset<16> bit ( 0xFFFF ) // 0~15位都置1
bitset<32> bit ( 0xFFFF ) // 0~15位置1,16~31位置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 )
l bitset的成员函数
any() 是否存在位置为1的二进制位
none() 不存在置为1的二进制位?
count() 置为1的二进制位的个数
size() 总的二进制位的个数
[pos] 访问在pos处的二进制位
test(pos) pos处的二进制位是否为1
set() 所有位都置1
set(pos) pos处的二进制置1
reset() 所有二进制置0
reset(pos) pos处的二进制位置0
flip() 所有位置反
flip(pos) pos位置反
to_ulong() 返回一个 unsigned long 值
os<<b 位集输出到os流
参考: 《 C++ Primer》