[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}

posted @ 2017-06-12 00:22  战侠歌1994  阅读(376)  评论(0编辑  收藏  举报