C++ bitset对象

位使用来保存一组项或条件的yes/no信息的简洁方法。标准库提供的bitset类简化位集的处理

bitset对象的定义和初始化
类似于vector,bitset类是一种类模板:而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。
bitset<32> bitvec;
给出的常量值必须是常亮表达式。长度值必须定义为整型字面值常量或是已用常量初始化的整型的const对象。
和vector的元素一样bitset中的位是没有命名的,程序员只能按位置来访问它们。
位集合的位置编号从0开始,因此bitvec的位序是从0~31.以0位开始的位串是低阶位的,以31结束的位串是高阶位的
初始化的几种形式:
bitset

b.any();
b.none();
b.count();
b.size();
b[pos];
b.test(pos);
b.set();
b.set(pos);
b.reset();
b.reset(pos);
b,flip();
b.flip(pos)
b.to_ulong();
os<<b;

如果想知道置为1的二进制位个数,可以使用count操作,该操作返回置为1的二进制制位个数。
size_t bits_set = bitvec,count();
size_t类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的c++版本。他是一个与及其相关的unsigned类型,其大小足以保证存储内存中对象大小。
与vector和string中size操作一样,bitsize的size操作返回bitsize对象中二进制位的个数,返回值的类型是size_t:
size_t sz= bitvec,size();

访问bitset对象中的位
可以用下标操作来读或写某个索引位置的二进制位
获取bitset对象的值
to_ulong操作返回一个unsigned long值,该值与bitset对象的位模式存储值相同。仅当bitset类型的长度小于或等于unsigned long的长度的时,才可以使用to_ulong操作。
to_ulong操作主要用于把bitset对象转到c风格或标准c++之前风格的程序上。如果bitset对象包含的二进制位数超过unsigned long长度 ,将会产生运行时异常。

int main(int argc, char**argv) {

    //bitset<32>bitvec2(0xffffffffffffffff);//64位机表示的数的最大表示
    //unsigned long ulong = bitvec2.to_ulong();
    //cout << "bitvec2:" << bitvec2 << endl;
    //cout << "ulong" << ulong << endl;
    //string strval = "1100";
    //bitset<32> bitvec4(strval);
    //size_t bits_size = bitvec4.count();
    //cout << "bitvec4:" << bitvec4 << endl;
    //cout << "count:" << bits_size << endl;
    //bitvec4.flip();
    //cout << "bitsize" << bitvec4 << endl;
    int i = 0;
    vector<int>ivec;
    while (cin >> i) {
        ivec.push_back(i);
    }
    bitset<32>bitvec(0xffff0fff0);
//  vector<int>::size_type ix = 1,iy = 2,iz = 3,ia = 5,ib = 8,ic = 13,id = 21;

    //位数索引从右起
    for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++) {
        if (!bitvec.test(ivec[ix]))
        {
            bitvec.set(ivec[ix]);
        }

    }
    cout << "bitvec:" << bitvec << endl;

    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值