C++ bitset 的一些有趣事实?
C++ 编程语言在 C++ 标准模板库中定义了一个名为 bitset 的容器。这个 bitset 容器用于在位级别操作元素,即变量的每个位,也就是给定值的二进制转换。
1. Bitset 就像一个字符串 - Bitset 是一个位容器(只有 0 和 1 是有效的)。您可以创建任何一组位,由 bitset 的起始索引值和要考虑的元素数量指定,即您可以创建一个包含 2 个元素的 bitset,从 bitset 的索引 1 开始,并将其附加到 bitset 的末尾。
例如 - 我们需要从位字符串 01001110 的索引值 2 开始填充 4 个元素。此 bitset 将获取元素0011,这些元素将附加到 bitset 的末尾。因此,通过这种方法定义的 8 位 bitset 的值为00000011。
示例
#include <bitset> #include <string> #include <iostream> int main() { std::string bit_string = "10010110"; std::bitset<8> b1(bit_string, 1 , 4); std::cout << b1 << '\n' ; return 0; }
输出
00000010
2. 从字符串构造 Bitset - 如果您有一个字符串,其中只有两种类型的用于创建的值。您可以将此字符串转换为一个 bitset,该 bitset 将值视为其各自的 0/1 表示。
让我们举个例子来更好地理解这个概念,
我们有一个字符串“xyxxyyx”,从中我们可以创建一个与数组长度相同的 bitset,其中 x=0,y=1。创建的 bitset 为0100110。
库中定义了一个构造函数来执行此任务 -
bitset(str, offSet, size, zeroVal , oneVal) ;
这是一个用于创建 bitset 的构造函数。让我们深入了解构造函数,并学习构造函数的每个参数传达了什么。
str - 用于创建 bitset 的字符串。
offSet - 字符串的字符串索引。
size - 要创建的 bitset 的大小。
zeroVal - 将被视为 0 的字符串值
oneVal - 将被视为 1 的字符串值]
示例
#include <bitset> #include <string> #include <iostream> using namespace std; int main() { string bitstr = "xyxxyyyx"; bitset<8> bits(bitstr, 0, bitstr.size(), 'x', 'y'); cout <<"The bitset is : "<< bits << '\n'; }
输出
The bitset is: 01001110
3. 将 bitset 转换为字符串 - 在 bitset 中,有一个函数可以将 bitset 转换为字符串。函数to_string()用于将 bitset 的值存储到字符串中。字符串的长度与 bitset 的长度相同。
将 bitset 的元素存储到字符串中的顺序与 bitset 顺序相同,即 bitset 的第一个元素是字符串的第一个元素。
01010100 的字符串转换是“01010100”。
您可以通过在方法的参数列表中指定来用任何字母替换 0 和 1。这只是我们在 bitset 构造时所学内容的反向操作。
示例
#include <iostream> #include <bitset> using namespace std; int main() { bitset<8> b(19); cout<<"The value of the bitset is : "<<b<<endl; cout<<"The string conversion of the bitset is : "<<b.to_string()<<endl; cout<<"The string conversion by replacing 0 with T and 1 with P is : "; cout<< b.to_string('T', 'P')<<endl; }
输出
The value of bitset is : 00010011 The string conversion of bitset is : 00010011 string conversion by replacing 0 with T and 1 with P is : TTTPTTPP
bitset 上还有许多其他操作。还有一些可以使用的位运算符。这里讨论了 bitset 的基本函数和属性。