bitset 容器中的每一个元素都是一些二进制位,该容器就是用来处理位运算。
// 1. bitset 容器的创建 void test01() { // 1. 创建空的 bitset 容器 bitset<8> b1; // 尖括号中编写二进制位的个数 cout << b1 << endl; // 2. 通过字符串创建一个 Bitset 容器 string s1 = "00010011"; const char* s2 = "00000011"; bitset<8> b2(s1); bitset<2> b3(s2); cout << b2 << " " << b3 << endl; // 注意: // 1. 使用字符串构建 bitset 容器时,如果字符串中出现非0、非1的值,将会导致程序终止。需要捕获处理 invalid_argument 异常 // 2. 如果字符串的二进制位数比 bitset 设置的长度大,会导字符串右侧多出二进制位丢弃 // 3. 使用数字来构建 bitset 容器对象 bitset<32> b4(8); // 会将8的二进制位存储到容器中 00001000 cout << b4 << endl; } // 2. bitset 容器中的二进制位操作 void test02() { bitset<8> b("00000011"); // 1. 可以访问某个二进制位,或者修改某个二进制位 // 下标为0访问的是二进制位的低位 cout << b[0] << " " << b[1] << " " << b[2] << endl; b[0] = 100; // 使用下标给某个二进制位赋值的时,如果给的不是0、1,也不会导致程序终止。会将非0的指转换为1 cout << b << endl; // 2. 将某个二进制位、所有的位设置为 1 b.set(0, 0); // 第一个参数表示位置,第二个参数表示要设置的值 b.set(0, 1); // 简化: b.set(0) b.set(); // 表示将所有的二进制位设置为 1 cout << b << endl; // 3. 将某个二进制位设置为 0,或者将所有的二进制位设置为0 b.reset(0); cout << b << endl; b.reset(); // 将所有的二进制位设置为 0 cout << b << endl; // 4. 将某个二进制位进行反转。原来是1的话,修改成0;原来是0,修改为1. b.flip(0); // 将下标为0的二进制位进行反转 cout << b << endl; b.flip(0); cout << b << endl; } void test03() { bitset<8> b("11111110"); // 1. 打印二进制位的个数 cout << b.size() << endl; // 2. bitset 中有多少个1 cout << b.count() << endl; // 3. 判断 bitset 中有没有 1, 返回 true, 否则返回 false cout << boolalpha << b.any() << endl; // 4. 判断 bitset 中是否没有 1, 如果没有返回 true, 否则返回 false cout << boolalpha << b.none() << endl; // 5. 判断 bitset 中是否全部是1,如果是,返回 true, 否则返回 false cout << boolalpha << b.all() << endl; // 6. 判断某一个二进制位是否是1,如果是,返回 true, 否则返回 false cout << boolalpha << b.test(0) << endl; } // 3. bitset 容器位运算 // 位或、位与、位异或、位取反、左移、右移 void test04() { int num1 = 2; int num2 = 3; bitset<8> b1(num1); bitset<8> b2(num2); cout << b1 << endl; cout << b2 << endl; cout << "----------" << endl; cout << (b1 | b2) << endl; cout << (b1 & b2) << endl; cout << (b1 ^ b2) << endl; cout << (~b1) << endl; cout << (b1 << 1) << endl; cout << (b2 >> 1) << endl; } // 4. bitset 数值转换 void test05() { int number = 10; bitset<8> b(number); b <<= 1; // 可以将二进制位转换为相应的数字 cout << b.to_ullong() << endl; cout << b.to_ulong() << endl; cout << b.to_string() << endl; } // 5. bitset 容器使用案例 // 从键盘输入一个数字,判断该数字的奇偶性 void test06() { int number; cout << "请输入一个数字:"; cin >> number; // 1. 第一种方法 /*if (number % 2 == 0) { cout << "偶数" << endl; } else { cout << "奇数" << endl; }*/ // 2. 第二种方法 00000011 /*if ((number & 1) == 0) { cout << "偶数" << endl; } else { cout << "奇数" << endl; }*/ // 3. 使用 bitset 容器 bitset<32> b(number); if (b.test(0)) { cout << "奇数" << endl; } else { cout << "偶数" << endl; } }