• 《C++ Primer》笔记处理0,1字符操作标准库 bitset


    原来C++中还有专门处理0,1操作的库类 bitset(从字面上解释,比特集合,集合貌似不贴切。)
    1.
    bitset 是处理二进制位的有序集 ,每个位读只能是0或1.
    #include <bitset>
    using std::bitset;
    2.
    bitset 对象的定义和初始化 
    bitset<32> bitvec; // 32 bits, all zero
    在 32 位 unsigned long 的机器上,十六进制值 0xffff 表示为二进制位 就是十六个 1 和十六个 0(每个 0xf 可表示为 1111)。可以用 0xffff 初始 化 bitset 对象 

    // bitvec1 is smaller than the initializer
    bitset<16> bitvec1(0xffff); // bits 0 ... 15 are set to 1

    // bitvec2 same size as initializer
    bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1;
    16 ... 31 are 0

     // on a 32-bit machine, bits 0 to 31 initialized from 0xffff

     bitset<128> bitvec3(0xffff); // bits 32 through 127 initialized to zero

    string 对象初始化 bitset 对象

    当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。

    从 string 对象读入位集的顺序是从右向左(from right to left):

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

    bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对 象的字符个数小于 bitset 类型的长度,则高阶位置为 0。 

    当用 string 对象初始
    化 bitset 对象时,记住这一差别很重要。 

    不一定要把整个 string 对象都作为 bitset 对象的初始值。相反,可以只 用某个子串作为初始值:

    string str("1111111000000011001101");
    bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100

    bitset<32> bitvec6(str, str.size() - 4); // use last 4 characters 

    3.7. bitset 操作

    b.any()

    page146image9992

    b 中是否存在置为 1 的二进制位?

    page146image11736 page146image12160

    b.none()

    b 中不存在置为 1 的二进制位吗?

    page146image15624 page146image16216 page146image16536 page146image16960 page146image17384

    b.count()

    b 中置为 1 的二进制位的个数

    page146image21136 page146image21728 page146image22048 page146image22472 page146image22896

    b.size()

    b 中二进制位的个数

    page146image26568 page146image27160 page146image27480 page146image27904 page146image28328

    b[pos]

    访问 b 中在 pos 处二进制位

    page146image32120 page146image32712 page146image33032 page146image33456 page146image33880

    b.test(pos)

    b 中在 pos 处的二进制位置为 1 么?

    page146image37752 page146image38344 page146image38664 page146image39088 page146image39512

    b.set()

    page146image40760 page146image41352 page146image41512 page146image41936 page146image42360

    把 b 中所有二进制位都置为 1

    page146image46000

    b.set(pos)

    page146image48040

    把 b 中在 pos 处的二进制位置为 1

    page147image1080

    3.7. bitset 操作

    b.any()

    page147image6776

    b 中是否存在置为 1 的二进制位?

    page147image8520 page147image8944

    b.reset()

    把 b 中所有二进制位都置为 0

    b.reset(pos)
    
    page147image15560 page147image15984

    把 b 中在 pos 处的二进制位置为 0

    b.flip()

    page147image21152 page147image21576

    把 b 中所有二进制位逐位取反

    b.flip(pos)

    page147image26624 page147image27048

    把 b 中在 pos 处的二进制位取反

    b.to_ulong()
    
    page147image33992 page147image34416

    用 b 中同样的二进制位返回一个 unsigned long 值

    page147image36240 page147image36664

    os << b

    page147image40144

    把 b 中的位集输出到 os 流


  • 相关阅读:
    SpringBoot
    SpringBoot
    MySQL
    Database
    Database
    MySQL
    Debug
    《mysql必知必会》学习_第18章
    C#中访问私有成员
    精彩语录收集
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/2836113.html
Copyright © 2020-2023  润新知