标准库 bitset
bitset 库提供了 简化位处理的方法。要使用bitset类就必须包含相关的头文件
# include <bitset>
初始化bitset对象的方法
创建 对象bt 位数为n 每位的值为0 bitset<n> bt;
bitset<n> bt(u); //bt 是一个 unsign long 型 u 的一个副本
bitset<n> bt(s); //bt 是一个 string对象 s中含有的位串的副本
bitset<n> bt(s, pos, n) //bt 是s中从位置 pos开始的 &nbps; n个位的副本
用string对象初始化 bitset 对象
string str = "1100";
// bt位模式中 第2,3位为1, 第0,1位 为0; 如果string 对象的字符长度小于bitset类型的,则bitset 高阶位全为0;
bitset<32> bt(str);
**string对象和bitset对象之间是反转化的;string对象的最右边字符(即是下标最大的那个字体)
用来初始化bitset对象的低阶位(即下标为0的位)。
//用某个子串作为bitset对象的初始值
string str("1111111000000011001101");
bitset<32> bt(str, 5, 4); //4 bits starting at str[5], 1100
bitset<32> bt(str, str.size() -4); //use last 4 characters
bitset对象上的操作
判断bt中是否存在置为1的二进制位 b.any()
盘但bt中是否不存在置为1的二进制位 b.none()
返回bt中置为1的二进制的个数 b.count()
访问bt中pos出的二进制位 b[pos]
判断bt中pos处的二进制位是否为1 b.test(pos)
把bt中的所有二进制都置为1 b.set()
把bt中在pos处的二进制位置为1 b.set(pos)
把bt中所有的二进制都置为0 b.reset()
把bt中处在pos处的二进制置为0 b.reset(pos)
把bt中的所有的二进制位逐位取反 b.flip()
把bt中处在pos处的二进制位取反 b.flip(pos)
用bt中同样的二进制位返回一个 unsign long 值 b.to_ulong
把bt中的位集输出到 os 流。 os<<b
~~参考资料: c++ primer 4 edition
bitset 库提供了 简化位处理的方法。要使用bitset类就必须包含相关的头文件
# include <bitset>
初始化bitset对象的方法
创建 对象bt 位数为n 每位的值为0 bitset<n> bt;
bitset<n> bt(u); //bt 是一个 unsign long 型 u 的一个副本
bitset<n> bt(s); //bt 是一个 string对象 s中含有的位串的副本
bitset<n> bt(s, pos, n) //bt 是s中从位置 pos开始的 &nbps; n个位的副本
用string对象初始化 bitset 对象
string str = "1100";
// bt位模式中 第2,3位为1, 第0,1位 为0; 如果string 对象的字符长度小于bitset类型的,则bitset 高阶位全为0;
bitset<32> bt(str);
**string对象和bitset对象之间是反转化的;string对象的最右边字符(即是下标最大的那个字体)
用来初始化bitset对象的低阶位(即下标为0的位)。
//用某个子串作为bitset对象的初始值
string str("1111111000000011001101");
bitset<32> bt(str, 5, 4); //4 bits starting at str[5], 1100
bitset<32> bt(str, str.size() -4); //use last 4 characters
bitset对象上的操作
判断bt中是否存在置为1的二进制位 b.any()
盘但bt中是否不存在置为1的二进制位 b.none()
返回bt中置为1的二进制的个数 b.count()
访问bt中pos出的二进制位 b[pos]
判断bt中pos处的二进制位是否为1 b.test(pos)
把bt中的所有二进制都置为1 b.set()
把bt中在pos处的二进制位置为1 b.set(pos)
把bt中所有的二进制都置为0 b.reset()
把bt中处在pos处的二进制置为0 b.reset(pos)
把bt中的所有的二进制位逐位取反 b.flip()
把bt中处在pos处的二进制位取反 b.flip(pos)
用bt中同样的二进制位返回一个 unsign long 值 b.to_ulong
把bt中的位集输出到 os 流。 os<<b
//modified by quanspace 2013-02-12 16:51
# include <iostream>
# include <bitset>
# include <cstddef>
using namespace std;
int main(){
//test the entire bitset
bitset<32> bt1; //32 bits , all zero.
//obj.any() -- is any bit in obj on?
bool is_set = bt1.any(); //false, all bit are zero
if(is_set)
cout<<"the bitset bt is already set."<<endl;
//obj.none() -- are no bits in obj on?
bool is_not_set = bt1.none();
if(is_not_set)
cout<<"the bitset bt is not set."<<endl;
//obj.count() -- return number of bits which state is 1.
bitset<32> bt2(0xffff);
size_t bit_cnt = bt2.count();
cout<<"the number of bits is "<<bit_cnt<<endl;
//acessing the bits in bitset
bitset<32> bt3;
for(int ix = 0; ix != 32; ix += 2 )//assign 1 to even numbered bit
bt3[ix] = 1;
cout<<"1.bt3 : "<<bt3<<endl;
//set, test, reset, flip operations
for(ix = 1; ix < 32; ix += 2)
bt3.set(ix);
cout<<"2.bt3 : "<<bt3<<endl;
if(bt3.test(0))
cout<<"bt3[0] is on."<<endl;
bt3.reset(); //set all the bits to zero
cout<<"3.bt3 : "<<bt3<<endl;
bt3.flip(); //reserve all the bit
cout<<"4.bt3 : "<<bt3<<endl;
return 0;
}
/*
运行结果:
---------------------------------------------------
the bitset bt is not set.
the number of bits is 16
1.bt3 : 01010101010101010101010101010101
bt3[0] is on.
3.bt3 : 00000000000000000000000000000000
4.bt3 : 11111111111111111111111111111111
Press any key to continue
*/
~~参考资料: c++ primer 4 edition