首页 > 其他 > 详细

bitset

时间:2020-02-29 18:12:10      阅读:72      评论:0      收藏:0      [点我收藏+]

bitset 简介

  • bitset 类定义在头文件 bitset 中。
  • bitset 使得位运算变得更加容易。

定义和初始化 bitset

bitset 类是一个类模板,具有固定的大小,定义一个 bitset 时,需要说明它包含多少个二进制位。

bitset<n> b;         //@ b有n位,每一位都是0
bitset<n> b(u);     //@ b是unsigned long long 值u的低n位的拷贝,如果n大于unsigned long long 的                        大小,则b超出unsigned long long 的高位被置0
bitset<n> b(s,pos,m,zero,one);  //@ b 是string s 从位置pos开始m个字符的拷贝,s只能包含字符0,1;                                 如果s中包含其他字符,构造函数会抛出 invalid_argument 异常,pos默                                 认为0,m默认为string::npos,zero 默认为 '0',one 默认为 '1'
bitset<n> b(cp,pos,m,zero,one); //@ 从cp指向的字符数组中拷贝字符串,如果未提供m,则cp必须指向一个C                                      风格字符串,如果提供了m,则从cp开始必须至少有m个0,1 字符

用 unsigned 值初始化 bitset

bitset<13>  bitvec1(0xbeef); //@ bitvec1 比初始值小,初始值中的高位被丢弃
cout << bitvec1 << endl;  //@ ?1111011101111?   
bitset<20> bitvec2(0xbeef); //@ bitvec2 比初始值大,初始值中的高位被填充0
cout << bitvec2 << endl;  //@ 00001111011101111?    
bitset<128> bitvec3(~0ULL); //@ 64 位机器中,long long 0ULL是64个0比特,因此~0ULL是64个1
cout << bitvec3 << endl;    //@ 0~63 是1,64~127是0

从 string 初始化 bitset

bitset<32> bitvec4("1100"); //@ 2,3 位为1,剩余的两位是 0
cout << bitvec4 << endl;  //@ 00000000000000000000000000001100
string str("1111111000000011001101");
//@ 使用子串初始化
bitset<32> bitvec5(str, 5, 4);  //@ 从str[5] 开始是的4个二进制位
cout << bitvec5 << endl;
bitset<32> bitvec6(str, str.size()-4);  //@ 使用最后4个字符
cout << bitvec6 << endl;

这里需要注意 string 的索引和 bitset 的索引是不同的。

bitset 操作

下表中置位表示置为1,复位表示置为0:

成员函数 函数功能
bs.any() 是否有置位的二进制位
bs.all() 是否所有的二进制位都被置位
bs.none() 不存在置位的二进制位
bs.size() 位数
bs.count() 被置位的二进制位个数
bs.test(pos) pos 是置位的返回true,否则返回false
bs.set() 全部位置1
bs.set(pos,v) pos 置成bool值v,v默认是true
bs.reset() 所有二进制位复位
bs.reset(pos) pos 复位
bs.flip() 全部位逐位取反
bs.flip(pos) pos 二进制位取反
bs[pos] 访问 pos 处的二进制位
bs.to_ulong() 将二进制转换为unsigned long输出
bs.to_ullong() 将二进制转换为unsigned long long输出
bs.to_string() 将二进制转换为字符串输出
~bs 按位取反 效果等效为bs.flip()
os << b 将二进制位输出到os流 小值在右,大值在左
is >> b 从is读取字符存入b。

对于 to_ulong,to_ullong ,如果 bitset 中的值不能放入给定类型中,则这两个操作会抛出 overflow_error 异常。

bitset

原文:https://www.cnblogs.com/xiaojianliu/p/12384400.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!