STL之bitset

bitset是C++的类库,它便于我们管理一系列的bit位。

1.使用前加上头文件:

     #include <bitset>
     using namespace std;
      
  
//2.bitset的构造:

    bitset<bitNum>b; //具有bitNUm位的b

 /*
 3.bitset的操作:
  
      1)b.all()//b中是否全是1
      2)b.any()//b中是否存在值为1的二进制位?
      3)b.none()//b中不存在值为1的二进制位吗?
      4)b.count()//b中含有多少个值为1的二进制位
      5)b[pos]//访问b在pos位中的二进制(最右边的位为第一位(b[0]))
      6)b.set()//把b中所有二进制位都置为1
      7)b.set(pos)//把b中  b[pos]  置为1
      8)b.reset()//把b中所有二进制位都置为0
      9)b.reset(pos)//把b中 b[pos]  置为0
      10)b.flip()//把b中所有二进制逐位取反
      11)b.flip(pos)//把b中b[pos]取反
      12)b.to_string()//用b中同样的二进制位返回一个字符串
      13)b.to_ulong()//用b中同样的二进制位返回一个unsigned long值
      14) b.to_ullong()//用b中同样的二进制位返回一个unsigned long long值
*/
  
//测试代码:

    #include  <iostream>
    #include <stdio.h>
    #include <bitset>
    #include <string>
    using namespace std;
    int main()
    {
        bitset<5>b,c;//具有5个bit位的bitset b,c
        //0的二进制:00000
        //30的二进制:01111
        b = 0;//从右往左,将30的5个bit位存入bitset b,此时b相当一个数组,下标从0开始
        c = 30;
        //printf("%d",b[0]);编译,出现错误,使用bitset不能用printf来访问
    
        cout<<"b: "<<b<<endl;
        cout<<"c: "<<c<<endl;
        cout<<"c二进制位全是1吗? "<<c.all()<<endl;
        cout<<"c 的bit位数  "<<c.size()<<endl;//之前定义的时候,bitNUm只取了5位
        cout<<"b中存在为1的二进制吗? "<<b.any()<<"  c中存在为1的二进制吗? "<<c.any()<<endl;
    
        cout<<"b中不存在为1的二进制吗? "<<b.none()<<"  c中不存在为1的二进制吗? "<<c.none()<<endl;
    
        cout<<"b中有多少个为1的二进制位? "<<b.count()<<"  c中有多少个为1的二进制位? "<<c.count()<<endl;
    
        cout<<"b的第1位是:"<<b[0]<<endl;
        cout<<"b的第5位是:"<<b[4]<<endl;
        cout<<"c的第1位是:"<<c[0]<<endl;
        cout<<"c的第5位是:"<<c[4]<<endl;
    
        b.set();
        cout<<"经过b.set()后,b变为"<<b<<endl;
        b.reset();
        cout<<"再经过b.reset()后,b变为"<<b<<endl;
        c.set(0);
        cout<<"经过c.set(0)后,c的第1位(c[0])变为:"<<c[0]<<endl;
        c.reset(0);
        cout<<"经过c.reset(0)后,c的第1位变为:"<<c[0]<<endl;
        b.flip();
        cout<<"再经过b.flip()后,b变为"<<b<<endl;
        b.flip(4);
        cout<<"经过b.flip(4),b的第5位变为:"<<b[4]<<endl;
        cout<<"b转换为同样的字符串形式:";
        string s = b.to_string();
        cout<<s<<endl;
        cout<<"b的二进制位返回的unsigned long:";
        unsigned long x = b.to_ulong();
        cout<<x<<endl;
        return 0;
    }

在这里插入图片描述
官方通道: bitset reference C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enco-Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值