📜  C++ STL-bitset.count()函数(1)

📅  最后修改于: 2023-12-03 14:59:45.588000             🧑  作者: Mango

C++ STL-bitset.count()函数介绍

在 C++ 中,我们经常需要处理二进制位,例如处理位运算、位图等等。使用 bitset 类型可以方便地处理二进制位,而 bitset 类型的成员函数 count() 可以用来计算二进制位中值为 1 的位数。

bitset 类型的介绍

bitset 是 C++ 标准库中用来处理二进制位的类,位于 头文件中。可以通过构造函数或字符串来初始化 bitset 类型的对象,支持常用的位运算操作,例如按位取反、按位与、按位或等等。具体使用方式如下:

#include <bitset>
using namespace std;

// 构造函数
bitset<8> bit1(10); // 二进制 00001010,8 位二进制位
bitset<16> bit2(string("0101010101010101")); // 16 位二进制位
bitset<32> bit3(0x12345678); // 32 位二进制位

// 常用位运算操作
bitset<4> a(string("1010")); // 二进制 1010,4 位二进制位
bitset<4> b(string("0011")); // 二进制 0011,4 位二进制位
bitset<4> c = a & b; // 二进制 0010,按位与
bitset<4> d = a | b; // 二进制 1011,按位或
bitset<4> e = a ^ b; // 二进制 1001,按位异或
bitset<4> f = ~a; // 二进制 0101,按位取反

具体可以参考官方文档:bitset 类型

bitset.count() 函数的介绍

bitset 类型的成员函数 count() 用来计算二进制位中值为 1 的个数。例如,对于二进制数 01010101,计算值为 4。具体使用方式如下:

#include <bitset>
using namespace std;

int main() {
    bitset<8> bit1(0b10101010); // 二进制 10101010,8 位二进制位
    int count = bit1.count(); // 计算二进制位中值为 1 的位数
    cout << count << endl; // 输出结果为 4

    return 0;
}

如果希望计算特定区间内的二进制位值为 1 的个数,可以使用下标运算符 [] 访问特定位的值,从而计算区间内值为 1 的个数。例如,对于二进制数 01010101,计算从第 2 位到第 6 位中值为 1 的个数,可以使用如下方法:

#include <bitset>
using namespace std;

int main() {
    bitset<8> bit1(0b01010101); // 二进制 01010101,8 位二进制位
    int count = 0;
    for (int i = 2; i <= 6; i++) {
        if (bit1[i]) {
            count++;
        }
    }
    cout << count << endl; // 输出结果为 3

    return 0;
}
总结

在 C++ 中,通过 bitset 类型可以很方便地处理二进制位,在需要计算二进制位中值为 1 的个数时,可以使用 count() 函数。同时,也可以通过下标运算符 [] 访问特定位的值,从而计算区间内值为 1 的个数。需要注意的是,bitset 类型的大小是固定的,无法在运行时动态调整。