【笔记】C++库函数——bitset

【笔记】C++库函数——bitset

看到有大佬掏出这个库函数,一愣。这绝对是未曾想象过的道路,长见识。有时候做题总能碰见稀奇古怪的库函数,每个都令我大开眼界。以后看到感兴趣的都会记录一下,感觉是个好东西,算是学习道路上的小小积累吧,抓紧记录一下。

头文件

#include <bitset>
using std::bitset;

定义与初始化

bitset<n> b;			//b有n位,每位都是0
bitset<n> b(u);			//b是unsigned long型u中的一个副本
bitset<n> b(s);			//b是string对象s中含有位串的副本
bitset<n> b(s,pos,n);	//b是s中从pos位置开始的n个位的副本

类似于vector,bitset类是一种类模板;与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值

bitset操作

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.set( p )把b中二进制位都置1/将第p+1位置1
b.reset()/b.reset( p )把b中二进制位都置0/将第p+1位置0
b.flip()把b中的位数都取反
b.to_ulong()把b中同样的二进制位返回一个unsigned_long值,如果超出范围会报错

此外,bitset运算也像普通整数一样,可以进行与、或、异或、左移、右移等操作。

#include <iostream>
#include <string>
#include <bitset>

int main ()
{
  std::bitset<4> foo (std::string("1001"));
  std::bitset<4> bar (std::string("0011"));

  std::cout << (foo^=bar) << '\n';       // 1010 (XOR,assign)
  std::cout << (foo&=bar) << '\n';       // 0010 (AND,assign)
  std::cout << (foo|=bar) << '\n';       // 0011 (OR,assign)

  std::cout << (foo<<=2) << '\n';        // 1100 (SHL,assign)
  std::cout << (foo>>=1) << '\n';        // 0110 (SHR,assign)

  std::cout << (~bar) << '\n';           // 1100 (NOT)
  std::cout << (bar<<1) << '\n';         // 0110 (SHL)
  std::cout << (bar>>1) << '\n';         // 0001 (SHR)

  std::cout << (foo==bar) << '\n';       // false (0110==0011)
  std::cout << (foo!=bar) << '\n';       // true  (0110!=0011)

  std::cout << (foo&bar) << '\n';        // 0010
  std::cout << (foo|bar) << '\n';        // 0111
  std::cout << (foo^bar) << '\n';        // 0101

  return 0;
}

参考胡小兔的博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值