< cpp‎ | utility
Utilities library
General utilities
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types

Elementary string conversions
Defined in header <bitset>
template< std::size_t N >
class bitset;

The class template bitset represents a fixed-size sequence of N bits. Bitsets can be manipulated by standard logic operators and converted to and from strings and integers.

bitset meets the requirements of CopyConstructible and CopyAssignable.


[edit] Template parameters

N - the number of bits to allocate storage for

[edit] Member types

proxy class representing a reference to a bit

[edit] Member functions

constructs the bitset
(public member function) [edit]
(removed in C++20)
compares the contents
(public member function) [edit]
Element access
accesses specific bit
(public member function) [edit]
accesses specific bit
(public member function) [edit]
checks if all, any or none of the bits are set to true
(public member function) [edit]
returns the number of bits set to true
(public member function) [edit]
returns the number of bits that the bitset holds
(public member function) [edit]
performs binary AND, OR, XOR and NOT
(public member function) [edit]
performs binary shift left and shift right
(public member function) [edit]
sets bits to true or given value
(public member function) [edit]
sets bits to false
(public member function) [edit]
toggles the values of bits
(public member function) [edit]
returns a string representation of the data
(public member function) [edit]
returns an unsigned long integer representation of the data
(public member function) [edit]
returns an unsigned long long integer representation of the data
(public member function) [edit]

[edit] Non-member functions

performs binary logic operations on bitsets
(function template) [edit]
performs stream input and output of bitsets
(function template) [edit]

[edit] Helper classes

hash support for std::bitset
(class template specialization) [edit]

[edit] Notes

If the size of the bitset is not known at compile time, std::vector<bool> or boost::dynamic_bitset<> may be used.

[edit] Example

#include <bitset>
#include <cassert>
#include <iostream>
int main()
    // constructors:
    constexpr std::bitset<4> b1;
    constexpr std::bitset<4> b2{0xA}; // == 0B1010
    std::bitset<4> b3{"0011"}; // can't be constexpr yet
    std::bitset<8> b4{"ABBA", /*length*/4, /*0:*/'A', /*1:*/'B'}; // == 0B0000'0110
    // bitsets can be printed out to a stream:
    std::cout << "b1:" << b1 << "; b2:" << b2 << "; b3:" << b3 << "; b4:" << b4 << '\n';
    // bitset supports bitwise operations:
    b3 |= 0b0100; assert(b3 == 0b0111);
    b3 &= 0b0011; assert(b3 == 0b0011);
    b3 ^= std::bitset<4>{0b1100}; assert(b3 == 0b1111);
    // operations on the whole set:
    b3.reset(); assert(b3 == 0);
    b3.set(); assert(b3 == 0b1111);
    assert(b3.all() && b3.any() && !b3.none());
    b3.flip(); assert(b3 == 0);
    // operations on individual bits:
    b3.set(/* position = */ 1, true); assert(b3 == 0b0010);
    b3.set(/* position = */ 1, false); assert(b3 == 0);
    b3.flip(/* position = */ 2); assert(b3 == 0b0100);
    b3.reset(/* position = */ 2); assert(b3 == 0);
    // subscript operator[] is supported:
    b3[2] = true; assert(true == b3[2]);
    // other operations:
    assert(b3.count() == 1);
    assert(b3.size() == 4);
    assert(b3.to_ullong() == 0b0100ULL);
    assert(b3.to_string() == "0100");


b1:0000; b2:1010; b3:0011; b4:00000110

[edit] See also

space-efficient dynamic bitset
(class template specialization) [edit]
Bit manipulation (C++20) utilities to access, manipulate, and process individual bits and bit sequences