【数据结构】bitset用法
bitset用法
bitset可以说是一个多位二进制数,每八位占用一个字节,因为支持基本的位运算,所以可用于状态压缩,n位bitset执行一次位运算的时间复杂度可视为n/32.
输出只能用cout
1.构造:
int a = 5; string b = "1011"; char c[4] = {'1','0','1','0'}; bitset<10>s1(string("1001")); //0000001001 bitset<10>s2(int(8)); //0000001000 bitset<10>s3(8); //0000001000 bitset<4>s4(string("10001")); //1000 bitset<4>s5(int(32)); //0000 bitset<4>s6; //0000 bitset<4>s7(a); //0101 bitset<4>s8(b); //1011 bitset<4>s9(c); //1010
-
不够的位数自动补0
-
size小于附的值时,int取后几位,string取前几位
-
不进行赋初值时,默认全部为0
2.运算:
bitset<4>s1(string("1001")); bitset<4>s2(string("1000")); s1[1] = 1; cout<<s1[0]<<endl; //1 cout<<s1<<endl; //1011 cout<<(s1==s2)<<endl; //0 cout<<(s1!=s2)<<endl; //1 cout<<(s1^s2)<<endl; //0011 cout<<(s1&s2)<<endl; //1000 cout<<(s1|s2)<<endl; //1011 cout<<(~s1)<<endl; //0100 cout<<(s1>>1)<<endl; //0101
3.函数:
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并返回0or1 cout<<s1.any()<<endl;//检查s1中是否有1,并返回1or0 cout<<s1.all()<<endl;//检查s1中是否全部为1,并返回0or1 cout<<s1.none()<<endl;//检查s1中是否全不为1,并返回0or1 // flip cout<<s1.flip(2)<<endl;//将参数位取反,0变1,1变0 cout<<s1.flip()<<endl;//不指定参数时,每一位取反 // set cout<<s1.set()<<endl;//不指定参数时,每一位变为1 cout<<s1.set(3,1)<<endl;//指定两位参数时,将第一参数位的元素变为第二参数的值,第二参数位只能为0or1 cout<<s1.set(3)<<endl;//只有一个参数时,将参数下标处变为1 // reset cout<<s1.reset(4)<<endl;//一个参数时将参数下标处变为0 cout<<s1.reset()<<endl;//不传参数时将bitset的每一位变为0 string s = s1.to_string(); //将bitset转换成string unsigned long a = s1.to_ulong(); //将bitset转换成unsigned long unsigned long long b = s1.to_ullong(); //将bitset转换成unsigned long long
本文作者:shikean@Tianjin University
本文链接:https://www.cnblogs.com/keanshi/p/17617761.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步