为了使程序员更好地操作二进制位,C++STL定义了一个操作二进制位集合的模板类:bitset。
不指定初始值时,bitset的所有位都默认初始化为0。我们可以从一个string或一个字符数组指针来初始化bitset。两种情况下,字符都直接表示位模式,即字符串中下标最小的字符表示最高位,反之亦然。如果string包含的字符数比bitset少,则bitset的高位被置为0。
bitset<8> b("1101");//b为00001101
也可以使用string的一部分作为bitset的初始值:
string s("11010111");
bitset<16> b(s, 5, 4);//从s[5]开始的4个字符作为biset的初始值,则b为0000000000000111
constexpr bool operator[]( std::size_t pos ) const;
reference operator[]( std::size_t pos );
test也能访问bitset元素,并且提供越界检查,但它只能访问不能对元素做任何修改。
bool all() const; //判断bitset中是否所有位都被置为1
bool any() const; //判断bitset中是否有任意位被置为1
bool none() const; //判断bitset中是否所有位都被置为0
bitset<N>& operator&=( const bitset<N>& other );
bitset<N>& operator|=( const bitset<N>& other );
bitset<N>& operator^=( const bitset<N>& other );
set
bitset<N>& set(); //将bitset的所有位都置为1
与set相反
bitset<N>& reset(); //将所有位置为0
位取反
bitset<N>& reset( size_t pos ); //将所有位取反
bitset<N>& flip( size_t pos ); //将指定位取反
std::basic_string<CharT,Traits,Allocator> to_string(CharT zero = CharT('0'), CharT one = CharT('1')) const;
to_string将bitset转化为字符串,默认二进制位0转换为'0',二进制位1转换为'1',也可以自行指定字符。
此外还有to_ulong和to_ullong分别将bitset转换为对应的unsigned long型和unsigned long long型数据。
不指定初始值时,bitset的所有位都默认初始化为0。我们可以从一个string或一个字符数组指针来初始化bitset。两种情况下,字符都直接表示位模式,即字符串中下标最小的字符表示最高位,反之亦然。如果string包含的字符数比bitset少,则bitset的高位被置为0。
bitset<8> b("1101");//b为00001101
也可以使用string的一部分作为bitset的初始值:
string s("11010111");
bitset<16> b(s, 5, 4);//从s[5]开始的4个字符作为biset的初始值,则b为0000000000000111
bitset操作
访问
访问符[]
bitset提供两种版本的访问符[]constexpr bool operator[]( std::size_t pos ) const;
reference operator[]( std::size_t pos );
因此,我们可以像操作数组一样通过[]来访问和修改bitset中对应位的值,但要注意的是,下标为0对应bitset的最低位,反之亦然。如bitset<4> b("1100"),b[0]对应的值是0
test也能访问bitset元素,并且提供越界检查,但它只能访问不能对元素做任何修改。
bool test( size_t pos ) const;
bool all() const; //判断bitset中是否所有位都被置为1
bool any() const; //判断bitset中是否有任意位被置为1
bool none() const; //判断bitset中是否所有位都被置为0
std::size_t count() const; //计算bitset中被置为1的位数
容量
constexpr std::size_t size() const noexcept; //返回bitset的大小
位运算
此外,bitset还提供各种常见的位运算符,如:与&=、或|=、非~、异或^=、移位(左移<<=和右移>>=),与&、|、等不同的是,它们是对bitset整体的操作,且对象是bitset。bitset<N>& operator&=( const bitset<N>& other );
bitset<N>& operator|=( const bitset<N>& other );
bitset<N>& operator^=( const bitset<N>& other );
bitset<N> operator~() const;
set
bitset<N>& set(); //将bitset的所有位都置为1
bitset<N>& set( size_t pos, bool value = true ); //将指定位置为value(默认为true,即1)
与set相反
bitset<N>& reset(); //将所有位置为0
bitset<N>& reset( size_t pos ); //将指定位置为0,没有第二参数
位取反
bitset<N>& reset( size_t pos ); //将所有位取反
bitset<N>& flip( size_t pos ); //将指定位取反
其他操作
template<class CharT = char, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>>std::basic_string<CharT,Traits,Allocator> to_string(CharT zero = CharT('0'), CharT one = CharT('1')) const;
to_string将bitset转化为字符串,默认二进制位0转换为'0',二进制位1转换为'1',也可以自行指定字符。
此外还有to_ulong和to_ullong分别将bitset转换为对应的unsigned long型和unsigned long long型数据。