C++类库bitset<>简介

来源:互联网 发布:制作音效的软件 编辑:程序博客网 时间:2024/06/07 03:23

bitset<>是C++的一个处理位集合的类库,使用它可以方便的管理一系列的bit位而不用程序员自己来写代码管理。
要使用bitset,就必须包含相关的头文件:

#include <bitset>

1、bitset的定义和初始化:

bitset<n> bs;          //n为确定的int数字,此时bs为n位,每位都为0;bitset<n> bs(u);       //u为unsigned long,bs为u类型的一个副本;bitset<n> bs(s);       //s为string对象,bs为string对象s中含有的位串的副本;

2、用unsigned值初始化bitset对象
当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。而bitset对象中的位集作为这种位模式的副本。如果bitset类型长度大于unsigned long值的二进制位数,则其余的高阶位置为0;如果bitet类型长度小于unsigned long值的二进制位数,则只使用unsigned值中的低阶位,超过bitet类型长度的高阶位将被丢弃。
在32位unsigned long的机器上,十六进制值0xffff表示为二进制位就是十六个1和十六个0(每个0xf可表示为1111)。可以用0xffff初始化bitset对象:

// bitvec1 is smaller than the initializer  bitset<16> bitvec1(0xffff);          // bits 0 ... 15 are set to 1  // bitvec2 same size as initializer  bitset<32> bitvec2(0xffff);          // bits 0 ... 15 are set to 1; 16 ... 31 are 0  // on a 32-bit machine, bits 0 to 31 initialized from 0xffff  bitset<128> bitvec3(0xffff);         // bits 32 through 127 initialized to zero  

3、用string对象初始化bitset对象
当用string对象初始化bitset对象时,string对象直接表示为位模式。同样多位补0。string对象和bitset对象之间是反向转化的,string对象的最右边字符(即下标最大的那个字符)用来初始化bitset对象的低阶位(即下标为0的位)。

string str("1100");bitset<8> bs(str);

4、访问bitset对象中的位
和 vector一样,bitset也可以通过下标操作符来读写某个索引位置的二进制位,同样的,也可以用下标操作符来测试给定二进制位的值或者设置某个二进制位的值。
5、bitset操作函数

bs.any()            //bs中是否存在值为1的二进制数bs.none()           //bs中不存在值为1的二进制位吗bs.count()          //bs中值为1的二进制位个数bs.size()           //bs中二进制位的个数bs[pos]             //访问bs在pos处的二进制位值bs.test(pos)        //bs中pos位置的二进制值是否为1bs.set()            //把bs中所有二进制位置1bs.reset()          //把bs中所有二进制位置0bs.set(pos)         //把bs中pos位置的二进制位置1bs.reset(pos)       //把bs中pos位置的二进制位置0bs.flip()           //把bs中所有二进制位的值按位取反bs.flip(pos)        //把bs中pos位置的二进制位取反bs.to_ulong()       //返回一个unsigned long值
原创粉丝点击