STL————bitset
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。
1 bitset<4> bitset1; //无参构造,长度为4,默认每一位为0 2 3 bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充,把12转成二进制 4 5 string s = "100101"; 6 bitset<10> bitset3(s); //长度为10,前面用0补充 7 8 char s2[] = "10101"; 9 bitset<13> bitset4(s2); //长度为13,前面用0补充 10 11 cout << bitset1 << endl; //0000 12 cout << bitset2 << endl; //00001100 13 cout << bitset3 << endl; //0000100101 14 cout << bitset4 << endl; //0000000010101
用字符串构造时,字符串只能包含 '0' 或 '1' ,否则会抛出异常。
构造时,需在<>中表明bitset 的大小(即size)。
在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充(如上面的栗子);
若比bitsize大,参数为整数时取后面部分,参数为字符串时取前面部分(如下面栗子):
1 bitset<2> bitset1(12); //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00 2 3 string s = "100101"; 4 bitset<4> bitset2(s); //s的size=6,而bitset的size=4,只取前面部分,即1001 5 6 char s2[] = "11101"; 7 bitset<4> bitset3(s2); //与bitset2同理,只取前面部分,即1110 8 9 cout << bitset1 << endl; //00 10 cout << bitset2 << endl; //1001 11 cout << bitset3 << endl; //1110
to_ulong()
输出是用到了to_long()来输出,这个是用来控制bitset中的输出宽度的。
1110和10001的二进制都超过了初始设定的长度。
1 bitset<4> bit(1110); //将十进制1110转化成二进制只有,取后面四位,得到6 2 cout<<bit.to_ulong()<<endl; 3 bitset<5> ait(10001);//将十进制10001转换为二进制之后,取后面5位,得到17 4 cout<<ait.to_ulong()<<endl;
conunt
返回的是1的个数。
bitset.count();//返回的是1的个数
bitset.size()-bitset.count();//这样就是0的个数