【C++ Primer】标准库bitset类型

/*
*标准库bitset类型
*Zhi-Yun Deng
*2013-10-31
*/
#include <iostream>
#include <bitset> //标准库bitset类型头文件
#include <string>
#include <cstddef> //size_t类型定义在cstddef头文件中

using std::cin;
using std::cout;
using std::endl;
using std::bitset;//bitset的using声明
using std::string;

int main()
{

    //初始化bitset对象
    bitset<16> bitvec_01; //bitvec_01有16位,每位都为0
    bitset<32> bitvec_02(0xf00f);//bitvec_02是0xf00f的一个副本

    //bitvec_1 is smaller than the initializer
    bitset<16> bitvec_1(0xffff); //bits 0...15 are set to 1
    //bitvec_2 same size as initializer
    bitset<32> bitvec_2(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> bitvec_3(0xffff); //bits 32 through 127 initialized to zero

    string strval("1100");
    bitset<32> bitvec_4(strval); //bitvec_4是string对象strval中含有的位串的副本

    string str("1111111000000011001101");
    bitset<32> bitvec_5(str, 5, 4); //4 bits starting at str[5], 1100
    bitset<32> bitvec_6(str, str.size()-4); //use last 4 characters


    //测试初始化后的值
    cout << "*********0、初始化*********" << endl;
    cout << "bitvec_01: " << bitvec_01 << endl;
    cout << "bitvec_02: " << bitvec_02 << endl;
    cout << "bitvec_1: " << bitvec_1 << endl;
    cout << "bitvec_2: " << bitvec_2 << endl;
    cout << "bitvec_3: " << bitvec_3 << endl;
    cout << "bitvec_4: " << bitvec_4 << endl;
    cout << "bitvec_5: " << bitvec_5 << endl;
    cout << "bitvec_6: " << bitvec_6 << endl;
    cout << "****************************\n" << endl;


    //bitset对象上的操作
    //1、测试整个bitset对象
    bool is_set_1 = bitvec_01.any(); //false, all bits are zero
    bool is_set_2 = bitvec_02.any(); //true, 0xf00f
    bool is_not_set_1 = bitvec_01.none(); //true, all bits are zero
    bool is_not_set_2 = bitvec_02.none(); //false, 0xf00f
    size_t bits_set_1 = bitvec_01.count(); //returns number of bits that are on
    size_t bits_set_2 = bitvec_02.count(); //returns number of bits that are on
    size_t sz_1 = bitvec_01.size(); //returns 16
    size_t sz_2 = bitvec_02.size(); //returns 32

    cout << "****1、测试整个bitset对象****" << endl;
    cout << "is_set_1: " << is_set_1 << endl; //0
    cout << "is_set_2: " << is_set_2 << endl; //1
    cout << "is_not_set_1: " << is_not_set_1 << endl; //1
    cout << "is_not_set_2: " << is_not_set_2 << endl; //0
    cout << "bits_set_1: " << bits_set_1 << endl; //0
    cout << "bits_set_2: " << bits_set_2 << endl; //8
    cout << "sz_1: " << sz_1 << endl; //16
    cout << "sz_2: " << sz_2 << endl; //32
    cout << "******************************\n" << endl;


    //2、访问bitset对象中的位
    cout << "***2、访问bitset对象中的位***" << endl;
    cout << "bitvec_01: " << bitvec_01 << endl;
    for(size_t index=0; index != bitvec_01.size(); ++index)
    {//通过下标将二进制位都置为1
        bitvec_01[index] = 1;
    }
    if(bitvec_01.test(0))
    {//用test操作测试某个位是否为1
        cout << "bitvec_01: " << bitvec_01 << endl;
    }

    bitvec_01.reset(); //重置为0
    cout << "bitvec_01: " << bitvec_01 << endl;

    for(size_t index=0; index!=bitvec_01.size(); ++index)
    {//用set操作将二进制位置为1
        bitvec_01.set(index);
    }
    if(bitvec_01[1])
    {//测试下标操作符的返回值,测试某个位是否为1
        cout << "bitvec_01: " << bitvec_01 << endl;
    }
    cout << "*****************************\n" << endl;


    //3、对整个bitset对象进行设置
    cout << "***3、对整个bitset对象进行设置***" << endl;
    cout << "bitvec_01: " << bitvec_01 << endl;
    bitvec_01.reset(); //set all the bits to 0
    cout << "bitvec_01: " << bitvec_01 << endl;
    bitvec_01.set(); //set all the bits to 1
    cout << "bitvec_01: " << bitvec_01 << endl;
    bitvec_01.flip(0); //reverses value of first bit
    cout << "bitvec_01: " << bitvec_01 << endl;
    bitvec_01[0].flip(); //also reverses the first bit
    cout << "bitvec_01: " << bitvec_01 << endl;
    bitvec_01.flip(); //reverses value of all bits
    cout << "bitvec_01: " << bitvec_01 << endl;
    cout << "*********************************\n" << endl;


    //4、获取bitset对象的值
    cout << "*****4、获取bitset对象的值*****" << endl;
    unsigned long ulong = bitvec_01.to_ulong(); //returns 0
    cout << "ulong: " << ulong <<endl;
    ulong = bitvec_01.set().to_ulong(); //returns 65535 (bitvec_01 is a 16-bits bitset object.)
    cout << "ulong: " << ulong <<endl;
    cout << "********************************\n" << endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值