bitset 用法

来源:互联网 发布:知识管理 知乎 编辑:程序博客网 时间:2024/04/29 17:34

出处:点击打开链接

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》

0 0
原创粉丝点击