声明:

    1. #include <iostream>
    2. #include <bitset>
    3. using namespace std;
    4. int main() {
    5. bitset<4> bitset1; //无参构造,长度为4,默认每一位为0
    6. bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充
    7. string s = "100101";
    8. bitset<10> bitset3(s); //长度为10,前面用0补充
    9. char s2[] = "10101";
    10. bitset<13> bitset4(s2); //长度为13,前面用0补充
    11. cout << bitset1 << endl; //0000
    12. cout << bitset2 << endl; //00001100
    13. cout << bitset3 << endl; //0000100101
    14. cout << bitset4 << endl; //0000000010101
    15. return 0;
    16. }

    :::danger 用字符串构造时,字符串只能包含 ‘0’ 或 ‘1’ ,否则会抛出异常。
    构造时,需在<>中表明bitset 的大小(即size)。
    在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充(如上面的栗子);若比bitsize大,参数为整数时取后面部分,参数为字符串时取前面部分 :::

    1. #include <iostream>
    2. #include <bitset>
    3. using namespace std;
    4. int main() {
    5. bitset<2> bitset1(12); //12的二进制为1100(长度为4),但bitset1的size=2,只取后面部分,即00
    6. string s = "100101";
    7. bitset<4> bitset2(s); //s的size=6,而bitset的size=4,只取前面部分,即1001
    8. char s2[] = "11101";
    9. bitset<4> bitset3(s2); //与bitset2同理,只取前面部分,即1110
    10. cout << bitset1 << endl; // 00
    11. cout << bitset2 << endl; // 1001
    12. cout << bitset3 << endl; // 1110
    13. return 0;
    14. }

    可用操作符:
    & | ^ ~ []

    可用函数:

    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函数更安全一些