一、初始化 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 个位的副本。
用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从string 对象读入位集的顺序是从右向左。
string strval("1100");
bitset<32> bitvec(strval);
bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对象的字符个数小于 bitset 类型的长度,则高阶位置为 0。
strval[0]=1----->bitvec[3]=1
strval[1]=1----->bitvec[2]=1
strval[2]=0----->bitvec[1]=0
strval[3]=0----->bitvec[0]=0
总结:从这里我们可以得知,bitset的对象的低阶位在最右边
string str("1111111000000011001101");
bitset<32> bitvec(str, 5, 4); //用str[5]开始向右4位 "1100"初始化bitset的对象,得到:bitvec[31]=0....bitvec[4]=,0bitvec[3]=1,bitvec[2]=1,bitvec[1]=0,bitvec[0]=0 bitset<32> bitvec(str, str.size() - 4); //str的开始str[0]到str[27]均初始化为0,而str[28]=1、str[29]=1、str[30]=0、str[31]=1分别初始化bitset对象bitvec的bitvec[3]=1、bitvec[2]=1、bitvec[1]=0、bitvec[0]=1
二、bitset 对象上的操作
由于书中翻译的感觉有点别扭,还是看英文的更加准确的理解这些操作,如下英文中的"on"即表示"1","off"则表示"0"
b.any()---------------Is any bit in b on?
b.none()--------------Are no bits in b on?
b.count()-------------Number of bits in b that are on
-------------count操作的返回类型是标准库中命名为size_t 类型
b.size()--------------Number of bits in b
--------------size操作的返回类型是标准库中命名为size_t 类型 如:size_t sz = bitvec.size();
b[pos]----------------Access bit in b at positionpos
b.test(pos)-----------Is bit in b in position pos on?
b.set()---------------Turn on all bits in b
b.set(pos)------------Turn on the bit in b at positionpos
b.reset()-------------Turn off all bits in b
b.rest(pos)-----------Turn off the bit in b at positionpos
b.flip()--------------Change the state of each bit in b
b.flip(pos)-----------Reverse value of the bit in b in positionpos
b.to_ulong()----------Returns an unsigned long with the same bits as inb
os<<b-----------------Prints the bits in b to the streamos
三、访问 bitset 对象中的位
通过下标来访问,在此就不再赘述了。
四、对整个 bitset 对象进行设置
bitvec.reset(); // set all the bits to 0.
bitvec.set(); // set all the bits to 1
bitvec.flip(0); // reverses value of first bit
bitvec[0].flip(); // also reverses the first bit
bitvec.flip(); // reverses value of all bits
五、获取bitset对象的值
六、输出二进制位
bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ... 31 are 0
cout << "bitvec2: " << bitvec2 << endl;
输出结果为:
bitvec2: 00000000000000001111111111111111