目录
- 1 概述
- 2 使用实例
- 3 接口使用
-
- 3.1 constructor
- 3.2 count_and_size
- 3.3 test
- 3.4 any
- 3.5 none
- 3.6 all
- 3.7 set
- 3.8 reset
- 3.9 filp
- 3.10 to_string
- 3.11 to_ulong
- 3.12 to_ullong
- 3.13 operators
1 概述
位集存储位(只有两个可能值的元素:0或1,true或false,…)。
该类模拟bool元素的数组,但针对空间分配进行了优化:通常,每个元素只占用一个位(在大多数系统上,这比最小的元素类型char少八倍)。
每个比特位置都可以单独访问:例如,对于一个名为foo的给定比特集,表达式foo[3]访问其第四个比特,就像正则数组访问其元素一样。但是,因为在大多数C++环境中,没有元素类型是单个位,所以各个元素都是作为特殊引用类型访问的(请参见bitset::reference)。
位集具有能够从整数值和二进制字符串构造并转换为它们的特性(请参见其构造函数和成员to_ulong和to_string)。它们也可以直接从二进制格式的流中插入和提取(请参阅适用的运算符)。
位集的大小在编译时是固定的(由其模板参数决定)。对于一个同时优化空间分配并允许动态调整大小的类,请参阅向量的布尔特化(vector<bool>)。
其类图如下:
2 使用实例
void BitsetSuite::operators()
{
std::bitset<4> a (std::string("1001"));
std::bitset<4> b (std::string("0011"));
TEST_ASSERT_EQUALS("1010", (a ^= b).to_string())//XOR,assign
TEST_ASSERT_EQUALS("0010", (a &= b).to_string())//AND,assign
TEST_ASSERT_EQUALS("0011", (a |= b).to_string())//OR,assign
TEST_ASSERT_EQUALS("1100", (a <<= 2 ).to_string())//Shitf left,assign
TEST_ASSERT_EQUALS("0110", (a >>= 1 ).to_string())//Shitf right,assign
TEST_ASSERT_EQUALS("1100", (~b).to_string())//NOT
TEST_ASSERT_EQUALS("0110", (b << 1 ).to_string())//Shitf left
TEST_ASSERT_EQUALS("0001", (b >> 1 ).to_string())//Shitf left
TEST_ASSERT_EQUALS(false, (a == b))//(0110==0011)
TEST_ASSERT_EQUALS(true, (b != a)) //(0011!=0110)
TEST_ASSERT_EQUALS("0101", (a ^ b).to_string())//XOR
TEST_ASSERT_EQUALS("0010", (a & b).to_string())//AND
TEST_ASSERT_EQUALS("0111", (a | b).to_string