声明:
#include <iostream>
#include <bitset>
using namespace std;
int main() {
bitset<4> bitset1; //无参构造,长度为4,默认每一位为0
bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充
string s = "100101";
bitset<10> bitset3(s); //长度为10,前面用0补充
char s2[] = "10101";
bitset<13> bitset4(s2); //长度为13,前面用0补充
cout << bitset1 << endl; //0000
cout << bitset2 << endl; //00001100
cout << bitset3 << endl; //0000100101
cout << bitset4 << endl; //0000000010101
return 0;
}
:::danger
用字符串构造时,字符串只能包含 ‘0’ 或 ‘1’ ,否则会抛出异常。
构造时,需在<>中表明bitset 的大小(即size)。
在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充(如上面的栗子);若比bitsize大,参数为整数时取后面部分,参数为字符串时取前面部分
:::
#include <iostream>
#include <bitset>
using namespace std;
int main() {
bitset<2> bitset1(12); //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00
string s = "100101";
bitset<4> bitset2(s); //s的size=6,而bitset的size=4,只取前面部分,即1001
char s2[] = "11101";
bitset<4> bitset3(s2); //与bitset2同理,只取前面部分,即1110
cout << bitset1 << endl; // 00
cout << bitset2 << endl; // 1001
cout << bitset3 << endl; // 1110
return 0;
}
可用操作符:& | ^ ~ []
可用函数:
size() |
求bitset大小 | |
---|---|---|
count() |
求bitset中1的个数 | |
test(idx) |
返回idx 位的二进制数 |
同[] |
any() |
检查bitset 中是否有1,返回的是bool类型 |
|
none() |
检查bitset 中是否没有1,返回的是bool类型 |
|
all() |
检查bitset 中是否全为1,返回的是bool类型 |
|
flip(idx) |
将指定位反转 | |
set() |
没有参数的set,将所有位置为1 | |
set(idx) |
将idx位置为1 | |
set(idx, 0) |
将idx位置为0 | |
reset() |
没有参数的reset,将所有位置为0 | |
reset(idx) |
将idx位置为0 | |
to_string() |
将bitset转换为01字符串 | |
to_ullong() |
将bitset转换为unsigned long long类型 |
- test函数会对下标越界作出检查,而通过 [ ] 访问元素却不会经过下标检查,所以,在两种方式通用的情况下,选择test函数更安全一些