C++ bitset类型

C++ bitset类型

C++ bitset用法

C++基础——bitset与string的相互转化

定义与初始化 bitset

  • 头文件 bitset

  • bitset是一个模板类. 类似于array类. 有固定大小.

  • 当定义一个bitset时.必须指定其含有多少个二进制位.

    bitset<32> bitvec(1U);

  • 可以使用 [] 进行访问

初始化 bitset 的方法

bitset<n> b; // b有n位. 每一个均为0. 

bitset<n> b(u); // b是unsigned long long 值u的低n位的拷贝.若n大于u的位数. 高位补零.

bitset<n> b(s,pos,m,zero,one); // b是string s从位置pos开始的m个字符的拷贝.s智能包含字符zero或者one.若包含其他字符,则抛出异常invalid_argument.字符在b中分别保存为zero和one. pos默认为0. m默认为string::npos.zero默认为'0'.one默认为'1'.

bitset<n> b(cp,pos,m,zero,one); // 与上一个构造函数相似.但从cp执行的字符数组中拷贝字符.若未提供m,必需是一个C风格的字符串.
用nsigned值初始化bitset
  • 若整数不够n的位数.高位补零.
  • 若大于n位. 高位溢出抛弃.
biset<13> bitvec1(0xbeef); // 二进制位为1111011101111
bitset<20> bitvec2(0xbeef); // 二进制位 0000101111101110111

// 示例:
// 创建一个8位长的bitset
bitset<8> bs;
// 显示这个bitset
for (int i = (int)bs.size()-1; i >= 0; i--) {
    cout << bs[i] << " ";
}
cout << endl;
// 创建另一个bitset
bitset<8> bs2((long)0xbeef);
// 显示
for (int i = (int)bs2.size()-1; i >= 0; i--) {
    cout << bs2[i] << " ";
}
cout << endl;
从给一个string初始化bitset
  • 从一个string或字符数组指针来初始化bitset. 两种情况下都直接表示 位模式. 字符串中最小的字符对应高位.

  • 不必要使用整个 string 来作为bitset的初始值. 只用一个子串也可作为初始值.

    string str("111111000000110011001");
    bitset<32> bitvec5(str,5,4); // 从str[5]开始连续4个二进制数
    bitset<32> bitvec6(str,str.size()-4); // 使用最后四个字符

bitset操作

// bitset操作
b.any(); // b中是否存在置位的二进制位
b.all(); // b中所有位都置位了吗?
b.none(); // b中不存在置位的二进制位吗?
b.count(); // b中位置的位数.
b.size(); // 返回b中的位数
b.test(pos); // 若pos的位置是置位的.返回真,否则为假.
b.set(pos,v); // 将pos位置的位是设置为布尔值v.v默认为true.
b.set(); // 未传递参数,则b中所有位置位!
b.reset(pos); // 将位置pos处的位复位
b.reset(); // 将b中所有位复位.
b.flip(pos); // 改变位置pos处的位的状态
b.flip(); // 改变b中所有位的状态
b[pos]; // [] 访问pos位 返回bool值. 真or假
b.to_ulong(); // 返回一个unsigned long值
b.to_ullong(); // 返回一个unsigned long long值
b.to_string(zero,one); // 返回一个string.zero和one默认为0和1.
os<<b; // 将b中二进制打印为1or0.打印到流os
is>>b; // 从is读入b. 当下一个字符不是1or0 或者已经读入b.size()个位时,读取过程停止.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值