C++标准库bitset

来源:互联网 发布:最新万网域名证书 编辑:程序博客网 时间:2024/05/01 23:19
#include <bitset>#include <iostream>using namespace std;//using std::bitsetint 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;}

0 0