概述
bitset是二进制容器,只可存放1,0.没有迭代器
template<size_t _Nb>
class bitset
//bitset类
: private _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)>
{
private:
typedef _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)> _Base;
typedef unsigned long _WordT;
//长整型
初始化
- bitset <位数> 名字
默认是均为0,变量s1为5个0
bitset <5> s1;
cout<<s1.to_string()<<endl;
00000
- bitset <位数> 名字(想转化为二进制的数字)
当位数正确时,变量s2为1000
bitset <4> s2(8);
cout<<s2.to_string()<<endl;
1000
当位数多时,自动在低位处补0直至补满位数
bitset<6> s2(8);
cout<<s2.to_string()<<endl;
100000
当位数少时,自动删除高位数字
biaset<2> s2(8);
cout<<s2.to_string()<<endl;
00
- 使用string字符串初始化
string a="10000";
bitset<5> s3(a);
cout<<s5.to_string()<<endl;
10000
string a="10000";
bitset<3> s3(a);
cout<<s5.to_string()<<endl;
在a中从左至右取依次3个
100
注意!不能直接用双引号中数赋值,bitset<5> s3(10000)是错误的!
bitset<5> s3(string("10000"));是正确的
- bitset<个数> 名字(字符串名,第几位开始(位数从左至右依次为0,1,2,3……)再依次数3个数
string a="11010"
bitset<3> s4(a,1,3);
cout<<s4.to_string()<<endl;
101
- 拷贝构造函数
bitset<5> s7(s1);
bitset<5> s8=s1;
扫描二维码关注公众号,回复:
4994520 查看本文章
逻辑运算
- 位数相同才可运算
与:&;或:|;非:~;异或:^;位移运算:>>,<<
void test2()
{
bitset<5> s1(string("11010"));
bitset<5> s2(string("01000"));
bitset<5> s3;
s3=~s1;
cout<<s3.to_string()<<endl;
s3=s1&s2;
s3=s1|s2;
s3=s1^s2;
s3=s1>>2;
s3=s1<<2;
s1&=s2;
s1|=s2;
s1^=s2;
s1<<=2;
s1>>=2;
}
to_string()
将无符号长整型转化为二进制输出(bitsat存储形式均为无符号长整型)
bitset<4> s1(8);
cout<<s1.to_string()<<endl;
1000
to_ulong()
无符号长整型输出
bitsat<5> s1(string("11010"));
cout<<to_ulong(s1)<<endl;
26
大小
- size()
返回元素个数
bitsat<5> s1(string("11010"));
cout<<s1.size()<<endl;
5
- count()
返回s1中1的个数
bitsat<5> s1(string("11010"));
cout<<s1.count()<<endl;
3
检测
- all()
检测s1中是否全为1,若是,返回真,若不是,返回假
bitsat<5> s1(string("11010"));
cout<<s1.all()<<endl;
0
- any()
检测s1中是否有1,若是,返回真,若不是,返回假
bitsat<5> s1(string("11010"));
cout<<s1.any()<<endl;
1
- none()
检测s1中是否全是0(没有1)
bitsat<5> s1(string("11010"));
cout<<s1.none()<<endl;
0
- test(a)
检测第a个位置是否为1,从低位开始数(右),0,1,2,3……
bitsat<5> s1(string("11010"));
cout<<s1.test(3)<<endl;
1
存取
- 编译器的0,1,2,3位输出是从低位到高位,与to_string()正好相反
bitset<5> s2(string("11010"));
cout<<s2.to_string()<<endl;
cout<<s2[0]<<s2[1]<<s2[2]<<s2[3]<<s2[4]<<endl;
to_string:11010
[0]-[4]:01011
- s[0]=1
将第0位变为1
- set()
将所有位均置为1
s2.set();
cout<<s2.to_string()<<endl;
11111
- set(n,0/1)
从低位开始数,第n位变为0/1
bitset<5> s2(string("11010"));
s2.set(1,0);
cout<<s2.to_string()<<endl;
11000
- reset()
复位,将所有位变为0
bitset<5> s2(string("11010"));
cout<<s2.reset()<<endl;
00000
查找
- _Find_first()
从低位开始数,返回第一个为1的位置
bitset<5> s3(string("11010"));
cout<<s3._Find_first()<<endl;
1
- _Find_next(n)
从第n位(0,1,2,3,4)开始数,返回第一个为1的位置,是第几个,从左向右为1,2,3,4,5
bitset<5> s3(string("11010"));
cout<<s3._Find_first(3)<<endl;
5
翻转
- flip()
所有的0变1,1变0
bitset<5> s3(string("11010"));
cout<<s3.flip()<<endl;
00101
- flip(n)
第n位0变1,1变0,低位开始数(0.1.2……)
bitset<5> s3(string("11010"));
cout<<s3.flip(2)<<endl;
01111