c++ 标准库 bitset

C++标准库:使用bitset简化位处理

 

摘要:位处理在C/C++程序中广泛存在,有许多情况下位是最好的解决方案,此时就是所谓的标志位,也就是说某一事件可能发生或不发生,有两个状态,而类似的事件有很多,并且都相互独立。这种情况标志位是最好的方案。然而对位的操作于计算机直观,可于人却很难理解,所以位操作是一个噩梦。std::bitset可以把这个噩梦给消除。

作为标准库一部分可以充分说明位的处理对于许多情况的重要性和普遍性,同时也可以看出来传统的使用位运算符直接进行位操作是很不方便且容易出错,以至于标准需要为此添加额外的支持,标准给的额外支持就是std::bitset的库。

std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数组一样使用位。下面看一个例子:

#include<bitset>
std :: bitset <8 > bs ;
上面的代码有两部分:一是包含的头文件,bitset模板类定义在bitset头文件中;另一个是std::bitset<8>,可以看出来,它是一个模板,传递的参数告诉编译器bs有8个位。

我们接着看上面的代码,通过上面两行的代码我们得到一个bitset的对象bs,bs可以装入8个位,我们可以通过数组的下标运算符来存取:

bs [0 ] = 1 ; //把第0位设置为1
bs [3 ] = true ; //把第3位设置为1,因为true可以转换为1
bs [7 ] = 0 ; //这个大家都明白了

bitset被设计为开放的,也就是说一个bitset对象可以转换为其它类型的值,典型的,我们想把一个整数设置成具有特定的位模式,我们可以简单地把一个bitset转换为一个整数:

unsigned  long value =bs. to_ulong ( ) ;
std :: bitset <32 > bs32 (value ) ;
bs32 [15 ] = 1 ;
value =bs32. to_ulong ( ) ;

此外bitset还可以也字符串互换,这样我们就可以更直观对bitset进行操作了,我只是简单地把我们想要的”01“字符串就可以了:

std :: bitset < 32 > bs ( "011010101001" ) ;
std :: string str =bs. to_string ( ) ;

我可以通过bitset作为中介实现字符到整数的转换或是整数到字符串的转换。对于bitset来除去这些给操作带来方便之外,它有一些便利函数,可以进一步方便最常见了操作。此处就不作说明了,大家可以参考许多介绍STL的书目或参考本文下面给出的链接。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值