C++ bitset

bitset就是可以存放二进制的容器。

对于bitset的主要操作有:





C++ 中的 `bitset` 是标准库提供的一个类模板,用于操作固定大小的二进制位集合。它定义在头文件 `<bitset>` 中,支持按位访问、设置、重置以及转换为字符串或整数等功能。 ### 基本用法 #### 1. 初始化 bitset 可以使用整数、字符串或者默认构造函数来初始化一个 `bitset` 对象: ```cpp #include <iostream> #include <bitset> int main() { std::bitset<8> b1; // 默认初始化为全0 std::bitset<8> b2(42); // 使用整数初始化,对应二进制是 00101010 std::bitset<8> b3("1100"); // 使用字符串初始化,高位补0,结果为 00001100 std::cout << "b1: " << b1 << "\n"; std::cout << "b2: " << b2 << "\n"; std::cout << "b3: " << b3 << "\n"; } ``` #### 2. 访问和修改位 可以通过索引访问特定位置的位,也可以通过成员函数 `set()`、`reset()` 和 `flip()` 来设置、清除或翻转位: ```cpp std::bitset<8> b; b[0] = 1; // 设置最低位为1 b.set(1); // 设置第1位为1 b.reset(0); // 清除第0位 b.flip(2); // 翻转第2位的状态 std::cout << "Modified bitset: " << b << "\n"; ``` #### 3. 转换为整数或字符串 `bitset` 提供了将位集转换为整数类型(如 `unsigned long` 或 `unsigned long long`)的方法,也可以将其转换为字符串表示形式: ```cpp std::bitset<8> b("10101010"); unsigned long value = b.to_ulong(); // 转换为 unsigned long std::string str = b.to_string(); // 转换为字符串 std::cout << "Value: " << value << "\n"; std::cout << "String: " << str << "\n"; ``` #### 4. 位运算 `bitset` 支持常见的位运算符,包括与 (`&`)、或 (`|`)、异或 (`^`) 和非 (`~`): ```cpp std::bitset<8> a("1100"); std::bitset<8> b("1010"); std::bitset<8> and_result = a & b; // 按位与 std::bitset<8> or_result = a | b; // 按位或 std::bitset<8> xor_result = a ^ b; // 按位异或 std::bitset<8> not_result = ~a; // 按位取反 std::cout << "AND: " << and_result << "\n"; std::cout << "OR: " << or_result << "\n"; std::cout << "XOR: " << xor_result << "\n"; std::cout << "NOT: " << not_result << "\n"; ``` #### 5. 查询状态 可以使用 `test()` 方法检查某个位置是否为1,使用 `any()` 判断是否有任意一位为1,使用 `none()` 判断所有位是否都为0: ```cpp std::bitset<8> b("00000001"); bool has_one = b.any(); // true bool all_zero = b.none(); // false bool is_set = b.test(0); // true std::cout << "Has any 1? " << has_one << "\n"; std::cout << "All zeros? " << all_zero << "\n"; std::cout << "Bit 0 is set? " << is_set << "\n"; ``` --- ### 示例:统计 bitset 中1的数量 以下是一个简单的示例,展示如何统计 `bitset` 中1的个数: ```cpp #include <iostream> #include <bitset> int main() { std::bitset<8> b("11001100"); int count = b.count(); std::cout << "Number of 1s in bitset: " << count << "\n"; } ``` --- ### 注意事项 - `bitset` 的大小必须在编译时确定,不能动态调整。 - 如果需要处理大尺寸的位集,可以考虑使用 `std::vector<bool>` 或者第三方库(如 Boost)中的 `dynamic_bitset`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值