C++标准库bitset

#include <bitset>
#include <iostream>

using namespace std;
//using std::bitset

int main()
{
    //1.bitset对象的定义和初始化
    //bitset<n> b;            //b 有 n 位,每位都 0
    //bitset<n> b(u);         //b 是 unsigned long 型 u 的一个副本
    //bitset<n> b(s);         //b 是 string 对象 s 中含有的位串的副本,如果不是位串,会抛出异常
    //bitset<n> b(s, pos, n); //b 是 s 中从位置 pos 开始的&nbps;n 个位的副本

    //bitset<32> bitvec;      // 32 bits, all zero
    //用unsigned值初始化bitset对象
    //bitset<16> bitvec1(0xffff);     // bits 0 ... 15 are set to 1
    //bitset<32> bitvec2(0xffff);     // bits 0 ... 15 are set to 1; 16 ... 31 are 0
    //bitset<128> bitvec3(0xffff);    // bits 32 through 127 initialized to zero

    //用string对象初始化bitset对象
    //当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从 string 对象读入位集的顺序是从右向左(from right to left):
    //bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对象的字符个数小于 bitset 类型的长度,则高阶位置为 0。
    //string strval("1100");
    //bitset<32> bitvet4(strval);

    //string str("11110000");
    //bitset<32> bitvec5(str, 3, 4);  //starting at str[3] 1000
    //bitset<32> bitvec6(str, str.size()-3);  //如果省略第三个参数,意味着从开始位置一直到string末尾的所有字符, 本例为最后3个字符,即000

    //2.bitset对象的操作
    //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.any()         b 中是否存在置为 1 的二进制位?
    //b.reset()       把 b 中所有二进制位都置为 0
    //b.reset(pos)    把 b 中在 pos 处的二进制位置为 0
    //b.flip()        把 b 中所有二进制位逐位取反
    //b.flip(pos)     把 b 中在 pos 处的二进制位取反
    //b.to_ulong()    用 b 中同样的二进制位返回一个 unsigned long 值
    //os << b         把 b 中的位集输出到 os 流

    //测试整个bitset
    //bitset<32> bitvec;
    //bool is_set = bitvec.any();
    //bool is_not_set = bitvec.none();
    //size_t bits_set = bitvec.count();
    //size_t size = bitvec.size();    //return 32
    //访问bitset对象中的位
    //for (int i=0; i != 32; i += 2)
    //{
    //    bitvec[i] = 1;
    //}

    //for (int i=0; i != 32; i += 2)
    //{
    //    bitvec.set(i);
    //}

    //for (int i = 0; i != 32; i++)
    //{
    //    if (bitvec.test(i)) //or if(bitvec[i])
    //    {
    //    }
    //}

    //对整个bitset对象进行设置
    //bitvec.reset();     //set all bits 0
    //bitvec.set();       //set all bits 1
    //bitvec.flip(0);     //对 bitvec[0] 取反
    //bitvec[0].flip();   //对 bitvec[0] 取反
    //bitvec.flip();      //对所有bit位取反

    //获取bitset对象的值
    //to_ulong 操作返回一个 unsigned long 值,该值与 bitset 对象的位模式存储值相同。
    //仅当 bitset 类型的长度小于或等于 unsigned long 的长度时,才可以使用 to_ulong 操作
    //如果 bitset 对象包含的二进制位数超过 unsigned long 长度,将会产生运行时异常
    //unsigned long ulong = bitvec.to_ulong();

    //输出二进制位
    //bitset<32> bitvec(0xffff);
    //cout<<"bitvec = "<<bitvec<<endl;    //bitvec = 00000000000000001111111111111111]
    
    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值