第一行国际惯例咕咕咕。
第二行——学习之路任重而道远。
以下为正文:
1.bitset是一种类似于数组的结构,不过区别是只能存1or0,而且优化内存空间,一个元素只占1bit
2.相关输出只能用cout
3.bitset的大小在编译时已经确定了
构造
1.<>里的参数表示bitset的大小
2.不够的位数自动补0
3.size小于附的值时,int取后几位,string取前几位
4.(类型(赋值)),int可忽略类型
5.也可以先规定一个变量,再把该变量赋值给bitset
6.赋值字符串时只能用01字符串
7.不进行赋初值时,默认全部为0
int a = 5;string b = "1011";char c[4] = {'1','0','1','0'};bitset<10>s1(string("1001")); //0000001001bitset<10>s2(int(8)); //0000001000bitset<10>s3(8); //0000001000bitset<4>s4(string("10001")); //1000bitset<4>s5(int(32)); //0000bitset<4>s6; //0000bitset<4>s7(a); //0101bitset<4>s8(b); //1011bitset<4>s9(c); //1010
基础运算
1.可以用[]进行下标访问和修改
2.二进制中&,|,^,~,>>,<<都可以进行
3.可用!=和==,返回0or1
bitset<4>s1(string("1001"));bitset<4>s2(string("1000"));s1[1] = 1; cout<<s1[0]<<endl; //1cout<<s1<<endl; //1011cout<<(s1==s2)<<endl; //0cout<<(s1!=s2)<<endl; //1cout<<(s1^s2)<<endl; //0011cout<<(s1&s2)<<endl; //1000cout<<(s1|s2)<<endl; //1011cout<<(~s1)<<endl; //0100cout<<(s1>>1)<<endl; //0101
几个函数
bitset<4>s1(string("1001"));bitset<4>s2(string("0011"));cout<<s1.count()<<endl;//用于计算s1中1的个数cout<<s1.size()<<endl;//s1的位数cout<<s1.test(0)<<endl;//用于检查s1[0]是0or1并返回0or1cout<<s1.any()<<endl;//检查s1中是否有1,并返回1or0cout<<s1.all()<<endl;//检查s1中是否全部为1,并返回0or1cout<<s1.none()<<endl;//检查s1中是否全不为1,并返回0or1cout<<s1.flip(2)<<endl;//将参数位取反,0变1,1变0cout<<s1.flip()<<endl;//不指定参数时,每一位取反cout<<s1.set()<<endl;//不指定参数时,每一位变为1cout<<s1.set(3,1)<<endl;//指定两位参数时,将第一参数位的元素变为第二参数的值,第二参数位只能为0or1cout<<s1.set(3)<<endl;//只有一个参数时,将参数下标处变为1cout<<s1.reset(4)<<endl;//一个参数时将参数下标处变为0cout<<s1.reset()<<endl;//不传参数时将bitset的每一位变为0string s = s1.to_string(); //将bitset转换成stringunsigned long a = s1.to_ulong(); //将bitset转换成unsigned longunsigned long long b = s1.to_ullong(); //将bitset转换成unsigned long longcout<<s<<endl;cout<<a<<endl;cout<<b<<endl;
欢迎指出错误qw
本文链接:https://my.lmcjl.com/post/3800.html
展开阅读全文
4 评论