详解C++ bitset用法
bitset
是C++ STL中的一个类,用于位运算。它最主要的作用是用来压缩表示布尔值数组。bitset
内部使用一个数组来存储每个位的状态,这个数组通常使用一个整数类型的数组,每个整数通常为一个字长,即32或64位。可以使用位运算符对bitset
进行各种操作。
本文将详细讲解bitset
的用法,以及两个示例说明。
基本用法
要使用bitset
,首先需要包含头文件<bitset>
。可以用以下方法定义bitset
对象:
bitset<8> bits; // 定义大小为8位的bitset对象,初始值为0
bitset<8> bits(0b101010); // 定义并初始化为二进制101010
bitset<8> bits("101010"); // 定义并初始化为字符串"101010"
可以通过以下方式访问和设置bitset
对象中的位:
bitset<8> bits("101010");
bits.set(0); // 将第0位设置为1
bits.reset(1); // 将第1位设置为0
bits[2] = 1; // 通过下标操作符将第2位设置为1
bits.flip(3); // 将第3位取反
可以通过以下方式输出bitset
对象:
bitset<8> bits("101010");
cout << bits << endl; // 输出:101010
位操作
以下是一些基本的位操作函数:
count()
:返回bitset
中为1的位数。digits()
:返回bitset
中存储的整数个数。size()
:返回bitset
中的位数。test(i)
:返回第i位是否为1。to_ulong()
:将bitset
转换为unsigned long
类型。to_ullong()
:将bitset
转换为unsigned long long
类型。
以下是一些基本的位运算操作:
&
:按位与。|
:按位或。^
:按位异或。~
:按位取反。
下面是一些bitset
的位运算示例:
bitset<8> bits1("101010");
bitset<8> bits2("010101");
bitset<8> bits3;
bits3 = bits1 & bits2; // 按位与,得到000000
bits3 = bits1 | bits2; // 按位或,得到111111
bits3 = bits1 ^ bits2; // 按位异或,得到111111
bits3 = ~bits1; // 按位取反,得到010101
示例1:二进制转十进制
以下示例展示如何使用bitset
将二进制数转换为十进制数:
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
// 定义大小为8位的bitset对象,初始值为0
bitset<8> bits("10101010");
// 输出二进制数
cout << "二进制数:" << bits << endl;
// 转换为十进制数
unsigned long num = bits.to_ulong();
cout << "十进制数:" << num << endl;
return 0;
}
上述代码输出结果为:
二进制数:10101010
十进制数:170
示例2:统计字符串中字母出现的次数
以下示例展示如何使用bitset
统计字符串中每个字母出现的次数:
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main()
{
string s = "abababcccddd";
// 统计每个字母出现的次数
bitset<26> bs;
for (int i = 0; i < s.size(); i++) {
char c = s[i];
bs[c - 'a'] = 1;
}
// 输出每个字母出现的次数
for (char c = 'a'; c <= 'z'; c++) {
if (bs[c - 'a']) {
int cnt = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == c) cnt++;
}
cout << c << ":" << cnt << endl;
}
}
return 0;
}
上述代码输出结果为:
a:3
b:3
c:3
d:3
这是因为字符串中每个字母都出现了3次。
结论
本文介绍了bitset
的基本用法和位操作,同时给出了两个使用bitset
的实际示例。bitset
在处理位运算问题时非常方便,如果我们需要处理大量的布尔值,并希望使用最少的空间,那么bitset
是一个非常有用的工具。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C++ bitset用法 - Python技术站