Cplusplus官网的资料:
http://www.cplusplus.com/reference/bitset/bitset/
http://www.cplusplus.com/reference/bitset/bitset/bitset/
bitset作为STL中一个位集,主要在涉及二进制位存储,操作时比较方便。
定义及基本操作:
bitset<n> b,定义一个包含n个二进制位的变量。
可以通过unsigned 值或string类型来初始化,如:
bitset<32> b(0xFFFF),表示将前16位初始化为1,后16位初始化为0;
string str = "1111111111111111";
bitset<32> b(str),作用同上,注意利用字符串初始化时,首先从字符串右端读入,并将其作为低位的值,
string str = "011";
bitset<32> b(str), 最低位开始依次为1, 1, 0,且长度不足时高位补0, 超过b的长度时,将字符串左端丢弃。
还可以指定字符串开始赋值的位置,和赋值长度。
string str = "10111";
bitset<5> b(str, 2, 3);
将字符串左端开始的第2个字符(最左端为第0个), 长度为3的字符串赋值给b,不足时,这里b的高位补0了。
b此时相当字符串”00111“。
常用转化函数:
to_ulong ();返回二进制串表示的unsigned long值;
to_string();返回string值。
应当特别注意的是,将b输出时,不论是以相应整数,还是相应字符串输出时,低位都应该在输出位置的右端,
string str = "011";
bitset<5> b(str);
cout<<b<<endl;
cout<<b.to_string();
上述输出为:
00011
00011
常用成员函数:
any() 是否存在位置为1的二进制位
none() 不存在置为1的二进制位?
count() 置为1的二进制位的个数
size() 总的二进制位的个数
[pos] 访问在pos处的二进制位
test(pos) pos处的二进制位是否为1
set() 所有位都置1
set(pos) pos处的二进制置1
reset() 所有二进制置0
reset(pos) pos处的二进制位置0
flip() 所有位置反
flip(pos) pos位置反
to_ulong() 返回一个 unsigned long 值
os<<b 位集输出到os流
好了终于弄明白了。