zoukankan      html  css  js  c++  java
  • bitset

    bitset 简介

    • bitset 类定义在头文件 bitset 中。
    • bitset 使得位运算变得更加容易。

    定义和初始化 bitset

    bitset 类是一个类模板,具有固定的大小,定义一个 bitset 时,需要说明它包含多少个二进制位。

    bitset<n> b;		 //@ b有n位,每一位都是0
    bitset<n> b(u); 	//@ b是unsigned long long 值u的低n位的拷贝,如果n大于unsigned long long 的						大小,则b超出unsigned long long 的高位被置0
    bitset<n> b(s,pos,m,zero,one);	//@ b 是string s 从位置pos开始m个字符的拷贝,s只能包含字符0,1;									如果s中包含其他字符,构造函数会抛出 invalid_argument 异常,pos默									认为0,m默认为string::npos,zero 默认为 '0',one 默认为 '1'
    bitset<n> b(cp,pos,m,zero,one); //@ 从cp指向的字符数组中拷贝字符串,如果未提供m,则cp必须指向一个C										风格字符串,如果提供了m,则从cp开始必须至少有m个0,1 字符
    

    用 unsigned 值初始化 bitset

    bitset<13>  bitvec1(0xbeef); //@ bitvec1 比初始值小,初始值中的高位被丢弃
    cout << bitvec1 << endl;  //@ ‭1111011101111‬	
    bitset<20> bitvec2(0xbeef); //@ bitvec2 比初始值大,初始值中的高位被填充0
    cout << bitvec2 << endl;  //@ 00001111011101111‬	
    bitset<128> bitvec3(~0ULL); //@ 64 位机器中,long long 0ULL是64个0比特,因此~0ULL是64个1
    cout << bitvec3 << endl;	//@ 0~63 是1,64~127是0
    

    从 string 初始化 bitset

    bitset<32> bitvec4("1100"); //@ 2,3 位为1,剩余的两位是 0
    cout << bitvec4 << endl;  //@ 00000000000000000000000000001100
    string str("1111111000000011001101");
    //@ 使用子串初始化
    bitset<32> bitvec5(str, 5, 4);	//@ 从str[5] 开始是的4个二进制位
    cout << bitvec5 << endl;
    bitset<32> bitvec6(str, str.size()-4);	//@ 使用最后4个字符
    cout << bitvec6 << endl;
    

    这里需要注意 string 的索引和 bitset 的索引是不同的。

    bitset 操作

    下表中置位表示置为1,复位表示置为0:

    成员函数 函数功能
    bs.any() 是否有置位的二进制位
    bs.all() 是否所有的二进制位都被置位
    bs.none() 不存在置位的二进制位
    bs.size() 位数
    bs.count() 被置位的二进制位个数
    bs.test(pos) pos 是置位的返回true,否则返回false
    bs.set() 全部位置1
    bs.set(pos,v) pos 置成bool值v,v默认是true
    bs.reset() 所有二进制位复位
    bs.reset(pos) pos 复位
    bs.flip() 全部位逐位取反
    bs.flip(pos) pos 二进制位取反
    bs[pos] 访问 pos 处的二进制位
    bs.to_ulong() 将二进制转换为unsigned long输出
    bs.to_ullong() 将二进制转换为unsigned long long输出
    bs.to_string() 将二进制转换为字符串输出
    ~bs 按位取反 效果等效为bs.flip()
    os << b 将二进制位输出到os流 小值在右,大值在左
    is >> b 从is读取字符存入b。

    对于 to_ulong,to_ullong ,如果 bitset 中的值不能放入给定类型中,则这两个操作会抛出 overflow_error 异常。

  • 相关阅读:
    log P1242 新汉诺塔
    Spring学习笔记
    spring之BeanFactory
    1.3.7、CDH 搭建Hadoop在安装之前(端口---第三方组件使用的端口)
    1.3.5、CDH 搭建Hadoop在安装之前(端口---Cloudera Search使用的端口)
    1.3.3、CDH 搭建Hadoop在安装之前(端口---CDH组件使用的端口)
    1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)
    1.3.2、CDH 搭建Hadoop在安装之前(端口---Cloudera Navigator加密使用的端口)
    1.3、CDH 搭建Hadoop在安装之前(端口)
    1.3.1、CDH 搭建Hadoop在安装之前(端口---Cloudera Manager和Cloudera Navigator使用的端口)
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/12384400.html
Copyright © 2011-2022 走看看