zoukankan      html  css  js  c++  java
  • C++ bitset的使用

    昨天cf题目全是二进制操作, 发现二进制在各种题中出现还挺多的, 学习了一下bitset

    bitset是C++语言的一个类库,用来方便地管理一系列的bit位。

    bitset存储二进制数位。

    bitset就像一个bool类型的数组一样,但是有空间优化。

    bitset中的每个元素都能单独被访问,例如对于一个叫做a的bitset,表达式a[3]访问了它的第4个元素,就像数组一样。

    (但是输出单独访问结果不能用printf,和bitset有关的输出都用cout)

    另外bitset的大小在编译时就需要确定,也就是说bitset<>的尖括号中写的是大小。

    bitset的运算就像一个普通的整数一样,可以进行与(&)、或(|)、异或(^)、左移(<<)、右移(>>)操作。

    init
    bitset b; b有n位,每位都为0
    bitset b(u); b是unsigned long型u的一个副本
    bitset b(s); b是string对象s中含有的位串的副本
    bitset b(s, pos, n); b是s中从位置pos开始的n个位的副本

    e.x.

    
    #include <iostream>
    #include <bitset>
    
    using namespace std;
    
    bitset<32> a(string("11111"));//注意是右对齐 
    bitset<2> b(string("10101"));//过长从头开始取 
    bitset<32> c(16);//保存进一个int的常用写法
     
    bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0
    bitset<8> bitset2(12);  //长度为8,二进制保存,前面用0补充
    string s = "100101";
    bitset<10> bitset3(s);  //长度为10,前面用0补充
    char s2[] = "10101";
    bitset<13> bitset4(s2);  //长度为13,前面用0补充
        cout << bitset1 << endl;  //0000
        cout << bitset2 << endl;  //00001100
        cout << bitset3 << endl;  //0000100101
        cout << bitset4 << endl;  //0000000010101
    
    function
    b.any() b中是否存在置为1的二进制位?
    b.none() b中不存在置为1的二进制位吗?
    b.count() b中置为1的二进制位的个数
    b.size() b中二进制位的个数
    b[pos] 访问b中在pos处的二进制位
    b.test(pos) b中在pos处的二进制位是否为1?
    b.set() 把b中所有二进制位都置为1
    b.set(pos) 把b中在pos处的二进制位置为1
    b.reset() 把b中所有二进制位都置为0
    b.reset(pos) 把b中在pos处的二进制位置为0
    b.flip() 把b中所有二进制位逐位取反
    b.flip(pos) 把b中在pos处的二进制位取反
    b.to_ulong() 用b中同样的二进制位返回一个unsigned long值
    os << b 把b中的位集输出到os流

    ref : https://blog.csdn.net/vocaloid01/article/details/82798450
    ref : https://www.cnblogs.com/magisk/p/8809922.html

  • 相关阅读:
    肥胖儿筛选标准
    文章索引
    面向对象66原则
    [精]Xpath路径表达式
    [精]XPath入门教程
    孕产期高危因素
    “华而不实”的转盘菜单(pie menu)
    xmind用例导excel用例,然后再用python排版
    NSObject
    [self class]与[super class]
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13049148.html
Copyright © 2011-2022 走看看