zoukankan      html  css  js  c++  java
  • bitset

    一:bitset头文件

    C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是 0 或 1,每个元素仅用 1bit 空间

    注:在用字符串构造时,字符串中只能包含‘0’和‘1’;bitset下标从0开始,可以通过【】访问元素,类似数组

    二:常用构造函数

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e5+10;
     5 const int inf = 0x3f3f3f3f;
     6 #define rep(i,first,second) for(ll i=first;i<=second;i++)
     7 #define dep(i,first,second) for(ll i=first;i>=second;i--)
     8 
     9 int main()
    10 {
    11     //1.bitset<len>b;
    12     //无参构造,长度为len,默认每一位为0
    13     bitset<4> bitset1;
    14 
    15     //2.bitset<len>b(unsigned long n)
    16     //长度为len,二进制保存n,若十进制化为二进制后位数不足len,前面用0补充
    17     //若十进制化为二进制后位数超过len,则前面被截除
    18     bitset<8> bitset2(12);
    19 
    20     //3.bitset<len>(string s)
    21     //长度为len,前面用0补充
    22     string s="100101";
    23     bitset<10> bitset3(s);
    24 
    25     //4.长度为9,前面用0补充
    26     char ss[]="10101";
    27     bitset<9> bitset4(ss);
    28 
    29     //5.bitset<len>b(string s,int pos)
    30     //长度为len,从s的pos为开始往后截取s,前面的补0
    31     string st="01011011";
    32     bitset<10>bitset5(st,1);
    33 
    34     //6.bitset<len>b(string s,int pos,int num)
    35     //从s的pos位开始取后面的num个,前面补0
    36     string stt="01011011";
    37     bitset<10>bitset6(stt,2,4);
    38 
    39 
    40     cout<<bitset1<<endl;
    41     cout<<bitset2<<endl;
    42     cout<<bitset3<<endl;
    43     cout<<bitset4<<endl;
    44     cout<<bitset5<<endl;
    45     cout<<bitset6<<endl;
    46 
    47     return 0;
    48 }

     三:可用操作符

     1 #include <iostream>
     2 #include <bitset>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     string s1="1001";
     9     string s2="0011";
    10     bitset<4>foo (s1);
    11     bitset<4>bar (s2);
    12 
    13     cout<<(foo^=bar)<<'
    '; //按位异或,赋值给foo
    14     cout<<(foo&=bar)<<'
    '; //按位与,赋值给foo
    15     cout<<(foo|=bar)<<'
    '; //按位或,赋值给foo
    16 
    17     cout<<(foo<<=1)<<'
    ';  //左移1位,低位补0,自身赋值
    18     cout<<(foo>>=1)<<'
    ';  //右移1位,高位补0,自身赋值
    19 
    20     cout<<(~bar)<<'
    ';     //按位取反
    21     cout<<(bar<<1)<<'
    ';   //左移一位,不赋值
    22     cout<<(bar>>1)<<'
    ';   //右移一位,不赋值
    23 
    24     cout<<(foo==bar)<<'
    '; //false,判foo与bar是否相等
    25     cout<<(foo!=bar)<<'
    '; //true,判foo与bar是否不相等
    26 
    27 
    28     return 0;
    29 }

    四.通过【】访问元素,类似数组,注意:最低位(右边是最低位)下标为 0 

     1 #include <iostream>
     2 #include <bitset>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     bitset<4> foo(8);
     9     for(int i=3;i>=0;i--){
    10         cout<<foo[i];
    11     }
    12     cout<<'
    ';
    13     return 0;
    14 }

     五:其他函数

     1 #include <iostream>
     2 #include <bitset>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     bitset<8> a("10011010");
     9 
    10     cout<<a.count()<<'
    ';  //(count函数用来求bitset中1的位数)
    11     cout<<a.size()<<'
    ';   //(size函数用来求bitset的大小
    12 
    13     cout<<a.test(0)<<'
    ';  //(test函数用来查找下标处的元素是0还是1,若为0返回0,若为1返回1
    14     cout<<a.test(7)<<'
    ';  
    15 
    16     cout<<a.any()<<'
    ';    //(any函数检查bitset中是否有1)
    17     cout<<a.none()<<'
    ';   //(none函数检查bitset中是否没有1)
    18     cout<<a.all()<<'
    ';    //(all函数检查bitset中是否全部为1)
    19     return 0;
    20 }

     六:类型转化函数:

     1 #include <iostream>
     2 #include <bitset>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     bitset<8> a("10011100");
     9     string s=a.to_string();
    10     unsigned long x=a.to_ulong();
    11     unsigned long long y=a.to_ullong();
    12 
    13     cout<<s<<'
    ';
    14     cout<<x<<'
    ';
    15     cout<<y<<'
    ';
    16     return 0;
    17 }

  • 相关阅读:
    C++服务器开发之基于对象的编程风格
    C++服务器开发之笔记三
    InstallShield 脚本语言学习笔记
    Win.ini和注册表的读取写入
    MFC中如何画带实心箭头的直线
    UE4新手引导之下载和安装虚幻4游戏引擎
    SQLServer · BUG分析 · Agent 链接泄露分析(转载)
    mysql5.6版本开启数据库查询日志方法
    远程读取json数据并写入数据库
    js中的什么时候需要用new来实例化?
  • 原文地址:https://www.cnblogs.com/wsy107316/p/12663182.html
Copyright © 2011-2022 走看看