zoukankan      html  css  js  c++  java
  • [C++] bitset

    bitset

    #include<bitset>

    bitset 对象的定义和初始化

    定义bitset时,要明确bitset有多少位:

    bitset<32> bitvec //32位二进制,初始化为0

    对于负数,在存储是会以负数的补码形式存储。
    bitset<10> haha(-20);

    unsigned 值初始化bitset 对象:
    当用unsigned 值初始化bitset 对象时,该值将转化为二进制的位模式。
    如果bitset类型长度大于 unsigned 值的二进制位数,则其余的高阶位将置为0;
    如果bitset 类型长度小于unsigned 值的二进制位数,则只使用unsigned值中的低阶位,超过bitset类型长度的高阶位将被丢弃。

    `bitset<16> bit(0xFFFF) //0~15位都置1'

    'bitset<32> bit(0xFFFF) //015位置1,1631位置0`

    string对象初始化bitset对象

    string strval("1100");
    bitset<32> bit(strval);
    

    注意:从string对象读入位集的顺序是从右向左
    即反向转化:string对象最右边的字符用来初始化bitset对象的低阶位(即下标为0的位)。
    bit的位模式中第2和3位置为1,其余位置都为0。
    如果string对象的字符个数小于bitset类型的长度,则高阶位将置为0。
    不一定要把整个string对象都作为bitset的初始值,可以只用某个子串作为初始值:

    string str("111111111100000000011011")
    bitset<32> bit(str,5,4)
    

    常用的成员函数:

    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
    os << b 把b中的位集输出到os流

    reference

    [STL容器之 bitset]{http://blog.csdn.net/htf15/article/details/7718712}
    [bitset的使用]{http://blog.csdn.net/acm_10000h/article/details/40951033}

  • 相关阅读:
    链表的头指针
    顺时针打印矩阵
    旋转数组的最小数字
    实现string类
    最长对称子串
    DFS和BFS
    最长公共子序列
    排序算法
    大端与小端
    交换两个数
  • 原文地址:https://www.cnblogs.com/zhanxiage1994/p/6987086.html
Copyright © 2011-2022 走看看