C++ STL bitset类用法

在C++11之前,bitset属于11个容器类中的一个(分别是deque, list, queue, priority_queue, stack, vector, map, multimap, set, multiset和bitset)。后来C++11新增了forward_list, unordered_map, unordered_multimap, unordered_set和unordered_multiset,且不将bitset视为容器,而将其视为一种独立的类别。

C++提供的bitset类方便我们进行各种位操作,使用时需包含头文件< bitset>,bitset类位于std命名空间中

template <size_t N>
class bitset
{
    ...
};

size_t 可看作 unsigned int。将 bitset 实例化时,N是非类型模板参数, 必须是一个整型常数,指明了实例化的bitset占用多少个位。例如:

bitset <40> bst;

则 bst 是一个由 40 个位组成的对象,用 bitset 的成员函数可以方便地访问其中任意一位。bitset 中的位从 0 开始编号,第 0 位是最右边的位

常用的构造方法
  1. 默认无参构造
    初始化全部位为0
  2. 十进制或者16进制数值
std::bitset<8> bs(7);
bs.to_string()  // 0000 0111
std::bitset<8> bs(0x07);
bs.to_string()  // 0000 0111
  1. 移植性更好的的构造方式:
bitset<numeric_limits<unsigned short>::digits> bs1(267); // 16位 
bitset<numeric_limits<unsigned long>::digits> bs2(267); // 32位
  1. 用string对象
std::bitset<8> bs("00000111");
bs.to_ulong();      // 7
  1. 迭代器构造
std::bitset<8> bs(string(bin.rbegin(), bin.rend()));  // 注意这里反向
成员函数

bitset 有许多成员函数,有些成员函数执行的就是类似于位运算的操作。bitset 成员函数列表如下:

bitset <N> & operator &= (const bitset <N> & rhs);  //和另一个 bitset 对象进行与操作
bitset <N> & operator |= (const bitset <N> & rhs);  //和另一个 bitset 对象进行或操作
bitset <N> & operator ^= (const bitset <N> & rhs);  //和另一个 bitset 对象进行异或操作
bitset <N> & operator <<= (size_t num);  //左移 num 位
bitset <N> & operator >>= (size_t num);  //右移 num 位
bitset <N> & set();  //将所有位全部设成 1
bitset <N> & set(size_t pos, bool val = true);  //将第 pos 位设为 val
bitset <N> & reset();  //将所有位全部设成0
bitset <N> & reset (size_t pos);  //将第 pos 位设成 0
bitset <N> & flip();  //将所有位翻转(0变成1,1变成0)
bitset <N> & flip(size_t pos);  //翻转第 pos 位
reference operator[] (size_t pos);  //返回对第 pos 位的引用
bool operator[] (size_t pos) const;  //返回第 pos 位的值
reference at(size_t pos);  //返回对第 pos 位的引用
bool at (size_t pos) const;  //返回第 pos 位的值
unsigned long to_ulong() const;  //将对象中的0、1串转换成整数
unsigned long long to_ullong() const; //将对象中的0、1串转换成长整数
string to_string () const;  //将对象中的0、1串转换成字符串(Visual Studio 支持,Dev C++ 不支持)
size_t count() const;  //计算 1 的个数
size_t size () const;  //返回总位数
bool operator == (const bitset <N> & rhs) const;
bool operator != (const bitset <N> & rhs) const;
bool test(size_t pos) const;  //测试第 pos 位是否为 1
bool any() const;  //判断是否有某位为1
bool none() const;  //判断是否全部为0
bitset <N> operator << (size_t pos) const;  //返回左移 pos 位后的结果
bitset <N> operator >> (size_t pos) const;  //返回右移 pos 位后的结果
bitset <N> operator ~ ();  //返回取反后的结果
bitset <N> operator & (const bitset <N> & rhs) const;  //返回和另一个 bitset 对象 rhs 进行与运算的结果
bitset <N> operator | (const bitset <N> & rhs) const;  //返回和另一个 bitset 对象 rhs 进行或运算的结果
bitset <N> operator ^ (const bitset <N> & rhs) const;  //返回和另一个 bitset 对象 rhs 进行异或运算的结果

参考自:
C语言中文网
bitset详解c++
C++ bitset 用法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值