STL之bitset

bitset存储的是二进数位,就和一个bool性数组差不多。用法上和数组的操作方式也差不多。

每位只占一个字节,大大优化了空间,可以通过数组形式访问。

定义

bitset在定义的时候必须定义大小,这里8便是我们定义的长度,定义一个空bitset时所有值默认为0;

#include <bitset>
bitset<8> b;
bitset<8> bit(8);
bitset<8> tp1(string("01010101"));
bitset<8> tp2(bit);

cout << "  b = " << b << endl;
cout << "bit = " << bit << endl;
cout << "tp1 = " << tp1 << endl;
cout << "tp2 = " << tp2 << endl;

输出:

1 b = 00000000
2 bit = 00001000
3 tp1 = 01010101
4 tp2 = 00001000
运算
bitset<4> tp1(string("0101"));
bitset<4> tp2(string("1110"));

cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl;
cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl;
cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl;
cout << "(~tp1) = " << (~tp1) << endl;

cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl;
cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl;
cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl;

cout << "(tp1 <<= 1) = " << (tp1 <<= 1) << endl;
cout << "(tp1 ^= tp) = " << (tp1 ^= 4) << endl;

cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl;
 cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;

输出:

(tp1 & tp2) = 0100
(tp1 | tp2) = 1111
(tp1 ^ tp2) = 1011
(~tp1) = 1010
(tp1 &= tp2) = 0100
(tp1 |= tp2) = 1110
(tp1 ^= tp2) = 0000
(tp1 <<= 1) = 0000
(tp1 ^= tp) = 0100
(tp1 == tp2) = 0
(tp1 != tp2) = 1
基本操作
bit.size();        //返回大小(长度)
bit.count();    //返回1的个数
bit.any();        //返回是否有1
bit.none();        //返回是否没有1
bit.set();        //全部置为1
bit.set(p);        //将p+1(下标从0开始!!)位置为1
bit.set(p,n);    //将p+1位置为n
bit.reset();    //全部置为0
bit.reset(p);    //将p+1位置为0
bit.flip();        //全部取反 等同于 (~bit)
bit.flip(p);    //将p+1位取反
bit.to_ulong();    //返回转换为 unsigned long  的结果,超范围会报错
bit.to_ullong();//返回转换为 unsigned long long 的结果,超范围报错
bit.to_string();//返回转换为 string 的结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值