【C++】STL系列——认识bitset的用法

C++ STL(Standard Template Library)中的 std::bitset 是一个用于表示和操作二进制位集合的类模板。它允许你以位的方式存储和操作数据,非常适合于需要高效位运算的场景,如图像处理、网络通信和算法优化等。

以下是 std::bitset 的一些基本用法及代码示例:

1. 定义和初始化

你可以使用 std::bitset 来定义一个固定大小的位集合,并在初始化时提供二进制字符串或整数来设置位的状态。

#include <iostream>
#include <bitset>

int main() {
    // 定义一个包含8个位的bitset,并初始化为0
    std::bitset<8> bitset1;

    // 定义一个包含8个位的bitset,并初始化为二进制字符串"1100"
    std::bitset<8> bitset2("1100");

    // 定义一个包含8个位的bitset,并初始化为整数5(二进制为"0101")
    std::bitset<8> bitset3(5);

    std::cout << "bitset1: " << bitset1 << std::endl;
    std::cout << "bitset2: " << bitset2 << std::endl;
    std::cout << "bitset3: " << bitset3 << std::endl;

    return 0;
}

2. 访问和修改位

你可以使用下标运算符 [] 或成员函数 test()set()reset()flip() 来访问和修改位的状态。

#include <iostream>
#include <bitset>

int main() {
    std::bitset<8> bitset("1010");

    // 使用下标运算符访问位
    std::cout << "Bit at position 0: " << bitset << std::endl;
    std::cout << "Bit at position 3: " << bitset << std::endl;

    // 使用test()函数检查位的状态
    std::cout << "Bit at position 2 is " << (bitset.test(2) ? "set" : "not set") << std::endl;

    // 使用set()函数设置位
    bitset.set(1);
    std::cout << "After setting bit at position 1: " << bitset << std::endl;

    // 使用reset()函数重置位
    bitset.reset(3);
    std::cout << "After resetting bit at position 3: " << bitset << std::endl;

    // 使用flip()函数翻转位
    bitset.flip(2);
    std::cout << "After flipping bit at position 2: " << bitset << std::endl;

    return 0;
}

3. 位运算

std::bitset 支持各种位运算,如按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。

#include <iostream>
#include <bitset>

int main() {
    std::bitset<8> bitset1("1010");
    std::bitset<8> bitset2("0101");

    // 按位与
    std::bitset<8> result_and = bitset1 & bitset2;
    std::cout << "bitset1 & bitset2: " << result_and << std::endl;

    // 按位或
    std::bitset<8> result_or = bitset1 | bitset2;
    std::cout << "bitset1 | bitset2: " << result_or << std::endl;

    // 按位异或
    std::bitset<8> result_xor = bitset1^bitset2;
    std::cout << "bitset1^bitset2: " << result_xor << std::endl;

    // 按位取反
    std::bitset<8> result_not = ~bitset1;
    std::cout << "~bitset1: " << result_not << std::endl;

    // 左移
    std::bitset<8> result_left_shift = bitset1 << 1;
    std::cout << "bitset1 << 1: " << result_left_shift << std::endl;

    // 右移
    std::bitset<8> result_right_shift = bitset1 >> 1;
    std::cout << "bitset1 >> 1: " << result_right_shift << std::endl;

    return 0;
}

4. 其他成员函数

std::bitset 还提供了一些其他有用的成员函数,如 count()size()any()none()all() 等。

  • count():返回被设置为 1 的位的数量。
  • size():返回 bitset 中的位数。
  • any():检查是否有任何位被设置为 1
  • none():检查是否所有位都被设置为 0
  • all():检查是否所有位都被设置为 1
#include <iostream>
#include <bitset>

int main() {
    std::bitset<8> bitset("10110110");

    // 使用count()函数计算被设置为1的位的数量
    std::cout << "Number of set bits: " << bitset.count() << std::endl;

    // 使用size()函数获取bitset的大小
    std::cout << "Size of bitset: " << bitset.size() << std::endl;

    // 使用any()函数检查是否有任何位被设置为1
    std::cout << "Any bit set? " << (bitset.any() ? "Yes" : "No") << std::endl;

    // 使用none()函数检查是否所有位都被设置为0
    std::cout << "No bits set? " << (bitset.none() ? "Yes" : "No") << std::endl;

    // 使用all()函数检查是否所有位都被设置为1
    std::cout << "All bits set? " << (bitset.all() ? "Yes" : "No") << std::endl;

    return 0;
}

以上就是 std::bitset 的一些基本用法和代码示例。std::bitset 提供了一个方便且高效的方式来处理二进制数据,是C++ STL中一个非常有用的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值