标准库 bitset 简单介绍

标准库 bitset
  bitset 库提供了 简化位处理的方法。要使用bitset类就必须包含相关的头文件 
  # include <bitset>
  
  初始化bitset对象的方法
  创建 对象bt 位数为n 每位的值为0   bitset<n> bt;
  bitset<n> bt(u);   //bt 是一个 unsign long 型 u 的一个副本
  bitset<n> bt(s);   //bt 是一个 string对象 s中含有的位串的副本
  bitset<n> bt(s, pos, n)  //bt 是s中从位置 pos开始的 &nbps; n个位的副本 
  
  用string对象初始化 bitset 对象
  string str = "1100";
  // bt位模式中 第2,3位为1, 第0,1位 为0; 如果string 对象的字符长度小于bitset类型的,则bitset 高阶位全为0;
  bitset<32> bt(str);


  **string对象和bitset对象之间是反转化的;string对象的最右边字符(即是下标最大的那个字体)
    用来初始化bitset对象的低阶位(即下标为0的位)。 
  
  //用某个子串作为bitset对象的初始值
  string str("1111111000000011001101");
  bitset<32> bt(str, 5, 4); //4 bits starting at str[5], 1100
  bitset<32> bt(str, str.size() -4);  //use last 4 characters
  
bitset对象上的操作
   判断bt中是否存在置为1的二进制位      b.any()
   盘但bt中是否不存在置为1的二进制位    b.none()
   返回bt中置为1的二进制的个数          b.count()
   访问bt中pos出的二进制位              b[pos]
   判断bt中pos处的二进制位是否为1       b.test(pos)
   把bt中的所有二进制都置为1            b.set()
   把bt中在pos处的二进制位置为1         b.set(pos)
   把bt中所有的二进制都置为0            b.reset()
   把bt中处在pos处的二进制置为0         b.reset(pos)
   把bt中的所有的二进制位逐位取反       b.flip()
   把bt中处在pos处的二进制位取反        b.flip(pos)
   用bt中同样的二进制位返回一个 unsign long 值  b.to_ulong
   把bt中的位集输出到 os 流。           os<<b
   
//modified by quanspace 2013-02-12 16:51
# include <iostream>
# include <bitset>
# include <cstddef>
using namespace std;
int main(){
    //test the entire bitset
    bitset<32> bt1;  //32 bits , all zero.
	
    //obj.any() -- is any bit in obj on? 
    bool is_set = bt1.any();  //false, all bit are zero
    if(is_set)
	cout<<"the bitset bt is already set."<<endl;
    //obj.none() -- are no bits in obj on?
    bool is_not_set = bt1.none();
    if(is_not_set)
	cout<<"the bitset bt is not set."<<endl;
	
    //obj.count() -- return number of bits which state is 1.
    bitset<32> bt2(0xffff);
    size_t bit_cnt = bt2.count();
    cout<<"the number of bits is "<<bit_cnt<<endl;
	
    //acessing the bits in bitset
    bitset<32> bt3;
    for(int ix = 0; ix != 32; ix += 2 )//assign 1 to even numbered bit
	bt3[ix] = 1;
    cout<<"1.bt3 : "<<bt3<<endl;
	
    //set, test, reset, flip operations
    for(ix = 1; ix < 32; ix += 2)
	bt3.set(ix);
    cout<<"2.bt3 : "<<bt3<<endl;   
    if(bt3.test(0))
	cout<<"bt3[0] is on."<<endl;
    bt3.reset(); //set all the bits to zero
    cout<<"3.bt3 : "<<bt3<<endl;
    bt3.flip();  //reserve all the bit	
    cout<<"4.bt3 : "<<bt3<<endl;
	
    return 0;
}

/*
运行结果:
---------------------------------------------------
the bitset bt is not set.
the number of bits is 16
1.bt3 : 01010101010101010101010101010101
bt3[0] is on.
3.bt3 : 00000000000000000000000000000000
4.bt3 : 11111111111111111111111111111111
Press any key to continue
*/


   
~~参考资料: c++ primer 4 edition 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值