STD::BITSET(3cxx)

πŸ’… std::bitset< _Nb > β€” the 3cxx manual page πŸ’…

okay so welcome to the 3cxx manual page for std::bitset< _Nb >, aka the fixed-size bit-sequence class that lowkey ate. this is part 1, bestie β€” more follows, so don’t clock out yet. ✨

✨ NAME ✨

std::bitset< _Nb > β€” the bitset class represents a fixed-size sequence of bits. no cap, that’s the whole vibe.

πŸ¦‹ SYNOPSIS πŸ¦‹

#include <bitset>

Inherits:

Inherits std::_Base_bitset<((_Nb)/(__CHAR_BIT__ *__SIZEOF_LONG__)+((_Nb)
%(__CHAR_BIT__ *__SIZEOF_LONG__)==0 ? 0 :1))>.

πŸŽ€ Classes πŸŽ€

  • class reference

πŸ’– Public Member Functions πŸ’–

  • constexpr bitset () noexcept β€” all bits set to zero.
  • template<typename _CharT > constexpr bitset (const _CharT *__str, typename __bitset::__string< _CharT >::size_type __n=__bitset::__string< _CharT >::npos, _CharT __zero=_CharT('0'), _CharT __one=_CharT('1'))
  • template<class _CharT , class _Traits , class _Alloc > constexpr bitset (const std::basic_string< _CharT, _Traits, _Alloc > &__s, size_t __position, size_t __n)
  • template<class _CharT , class _Traits , class _Alloc > constexpr bitset (const std::basic_string< _CharT, _Traits, _Alloc > &__s, size_t __position, size_t __n, _CharT __zero, _CharT __one=_CharT('1'))
  • template<class _CharT , class _Traits , class _Alloc > constexpr bitset (const std::basic_string< _CharT, _Traits, _Alloc > &__s, size_t __position=0)
  • constexpr bitset (unsigned long long __val) noexcept β€” initial bits bitwise-copied from a single word (others set to zero).
  • constexpr size_t _Find_first () const noexcept β€” finds the index of the first 'on' bit.
  • constexpr size_t _Find_next (size_t __prev) const noexcept β€” finds the index of the next 'on' bit after prev.
  • constexpr bool all () const noexcept β€” tests whether all the bits are on.
  • constexpr bool any () const noexcept β€” tests whether any of the bits are on.
  • constexpr size_t count () const noexcept β€” returns the number of bits which are set.
  • constexpr bitset< _Nb > & flip () noexcept β€” toggles every bit to its opposite value.
  • constexpr bitset< _Nb > & flip (size_t __position) β€” toggles a given bit to its opposite value.
  • constexpr bool none () const noexcept β€” the source one-liner here literally says: tests whether any of the bits are on. (yes, that’s what it says πŸ‘€)
  • constexpr bitset< _Nb > operator~ () const noexcept β€” see the no-argument flip().
  • constexpr bitset< _Nb > & reset () noexcept β€” sets every bit to false.
  • constexpr bitset< _Nb > & reset (size_t __position) β€” sets a given bit to false.
  • constexpr bitset< _Nb > & set () noexcept β€” sets every bit to true.
  • constexpr bitset< _Nb > & set (size_t __position, bool __val=true) β€” sets a given bit to a particular value.
  • constexpr size_t size () const noexcept β€” returns the total number of bits.
  • constexpr bool test (size_t __position) const β€” tests the value of a bit.
  • template<class _CharT , class _Traits , class _Alloc > constexpr std::basic_string< _CharT, _Traits, _Alloc > to_string () const β€” returns a character interpretation of the bitset.
  • template<class _CharT , class _Traits > constexpr std::basic_string< _CharT, _Traits, std::allocator< _CharT > > to_string () const
  • template<class _CharT > constexpr std::basic_string< _CharT, std::char_traits< _CharT >, std::allocator< _CharT > > to_string () const
  • constexpr std::basic_string< char, std::char_traits< char >, std::allocator< char > > to_string () const
  • template<class _CharT , class _Traits , class _Alloc > constexpr std::basic_string< _CharT, _Traits, _Alloc > to_string (_CharT __zero, _CharT __one=_CharT('1')) const
  • template<class _CharT , class _Traits > constexpr std::basic_string< _CharT, _Traits, std::allocator< _CharT > > to_string (_CharT __zero, _CharT __one=_CharT('1')) const
  • template<class _CharT > constexpr std::basic_string< _CharT, std::char_traits< _CharT >, std::allocator< _CharT > > to_string (_CharT __zero, _CharT __one=_CharT('1')) const
  • constexpr std::basic_string< char, std::char_traits< char >, std::allocator< char > > to_string (char __zero, char __one='1') const
  • constexpr unsigned long long to_ullong () const
  • constexpr unsigned long to_ulong () const β€” returns a numerical interpretation of the bitset.
  • constexpr bitset< _Nb > & operator&= (const bitset< _Nb > &__rhs) noexcept
  • constexpr bitset< _Nb > & operator|= (const bitset< _Nb > &__rhs) noexcept
  • constexpr bitset< _Nb > & operator^= (const bitset< _Nb > &__rhs) noexcept
  • constexpr bitset< _Nb > & operator<<= (size_t __position) noexcept
  • constexpr bitset< _Nb > & operator>>= (size_t __position) noexcept
  • constexpr bitset< _Nb > & _Unchecked_set (size_t __pos) noexcept
  • constexpr bitset< _Nb > & _Unchecked_set (size_t __pos, int __val) noexcept
  • constexpr bitset< _Nb > & _Unchecked_reset (size_t __pos) noexcept
  • constexpr bitset< _Nb > & _Unchecked_flip (size_t __pos) noexcept
  • constexpr bool _Unchecked_test (size_t __pos) const noexcept
  • constexpr reference operator[] (size_t __position) β€” array-indexing support.
  • constexpr bool operator[] (size_t __position) const β€” array-indexing support.
  • constexpr bool operator== (const bitset< _Nb > &__rhs) const noexcept β€” these comparisons for equality/inequality are, well, bitwise.
  • constexpr bitset< _Nb > operator<< (size_t __position) const noexcept β€” self-explanatory.
  • constexpr bitset< _Nb > operator>> (size_t __position) const noexcept β€” self-explanatory.

🌈 Friends 🌈

  • template<class _CharT , class _Traits , size_t _Nb2> std::basic_ostream< _CharT, _Traits > & operator<< (std::basic_ostream< _CharT, _Traits > &, const bitset< _Nb2 > &)
  • template<class _CharT , class _Traits , size_t _Nb2> std::basic_istream< _CharT, _Traits > & operator>> (std::basic_istream< _CharT, _Traits > &, bitset< _Nb2 > &)
  • class reference
  • struct std::hash< bitset >

🧚 Detailed Description 🧚

template<size_t _Nb>
    class std::bitset< _Nb >"The bitset class represents a fixed-size
    sequence of bits.

okay so the bitset class represents a fixed-size sequence of bits. and before you ask: note that bitset does not meet the formal requirements of a container. mainly, it lacks iterators. πŸ’€

The template argument, Nb, may be any non-negative number, specifying the number of bits (e.g., '0', '12', '1024*1024').

In the general unoptimized case, storage is allocated in word-sized blocks. Let B be the number of bits in a word, then (Nb+(B-1))/B words will be used for storage. B - NbB bits are unused. (They are the high-order bits in the highest word.) It is a class invariant that those unused bits are always zero. periodt, invariant maintained.

If you think of bitset as a simple array of bits, be aware that your mental picture is reversed: a bitset behaves the same way as bits in integers do, with the bit at index 0 in the least significant / right-hand position, and the bit at index Nb-1 in the most significant / left-hand position. Thus, unlike other containers, a bitset’s index counts from right to left, to put it very loosely. iykyk 🫢

This behavior is preserved when translating to and from strings. For example, the first line of the following program probably prints b('a') is 0001100001 on a modern ASCII system.

#include <bitset>
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
    long         a = 'a';
    bitset<10>   b(a);

    cout << "b('a') is " << b << endl;

    ostringstream s;
    s << b;
    string  str = s.str();
    cout << "index 3 in the string is " << str[3] << " but\n"
         << "index 3 in the bitset is " << b[3] << endl;
}

Also see: https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_containers.html for a description of extensions.

Most of the actual code isn’t contained in bitset<> itself, but in the base class _Base_bitset. The base class works with whole words, not with individual bits. This allows us to specialize _Base_bitset for the important special case where the bitset is only a single word.

Extra confusion can result due to the fact that the storage for _Base_bitset is a regular array, and is indexed as such. This is carefully encapsulated. slay for encapsulation πŸ’…

πŸ’œ Constructor & Destructor Documentation πŸ’œ

template<size_t _Nb> constexpr std::bitset< _Nb >::bitset () [inline], [constexpr], [noexcept]

All bits set to zero.

template<size_t _Nb> constexpr std::bitset< _Nb >::bitset (unsigned long long __val) [inline], [constexpr], [noexcept]

Initial bits bitwise-copied from a single word (others set to zero).

template<size_t _Nb> template<class _CharT , class _Traits , class _Alloc > constexpr std::bitset< _Nb >::bitset (const std::basic_string< _CharT, _Traits, _Alloc > & __s, size_t __position = 0) [inline], [explicit], [constexpr]

Use a subset of a string.

Parameters

  • __s β€” a string of 0 and 1 characters.
  • __position β€” index of the first character in __s to use; defaults to zero.

Exceptions

  • std::out_of_range β€” if pos is bigger the size of __s.
  • std::invalid_argument β€” if a character appears in the string which is neither 0 nor 1.

template<size_t _Nb> template<class _CharT , class _Traits , class _Alloc > constexpr std::bitset< _Nb >::bitset (const std::basic_string< _CharT, _Traits, _Alloc > & __s, size_t __position, size_t __n) [inline], [constexpr]

Use a subset of a string.

Parameters

  • __s β€” a string of 0 and 1 characters.
  • __position β€” index of the first character in __s to use.
  • __n β€” the number of characters to copy.

Exceptions

  • std::out_of_range β€” if __position is bigger the size of __s.
  • std::invalid_argument β€” if a character appears in the string which is neither 0 nor 1.

template<size_t _Nb> template<typename _CharT > constexpr std::bitset< _Nb >::bitset (const _CharT * __str, typename __bitset< _Nb >::__string< _CharT >::size_type __n = __bitset< _Nb >::__string<_CharT>::npos, _CharT __zero = _CharT('0'), _CharT __one = _CharT('1')) [inline], [explicit], [constexpr]

Construct from a character array.

Parameters

  • __str β€” an array of characters zero and one.
  • __n β€” the number of characters to use.
  • __zero β€” the character corresponding to the value 0.
  • __one β€” the character corresponding to the value 1.

Exceptions

  • std::invalid_argument β€” if a character appears in the string which is neither __zero nor __one.

πŸ’… MEMBER FUNCTION DOCUMENTATION πŸ’…

okay bestie, this is the big one β€” every member function, in the order the page gives them. no skipping, no "you get the vibe." we're going through all of them together 🫢


πŸ¦‹ all

template<size_t _Nb> constexpr bool std::bitset< _Nb >::all () const

[inline], [constexpr], [noexcept]

Tests whether all the bits are on. every single one. the whole squad.

Returns: True if all the bits are set.


✨ any

template<size_t _Nb> constexpr bool std::bitset< _Nb >::any () const

[inline], [constexpr], [noexcept]

Tests whether any of the bits are on. like, at least one of them showed up to the party.

Returns: True if at least one bit is set.


πŸŽ€ count

template<size_t _Nb> constexpr size_t std::bitset< _Nb >::count () const

[inline], [constexpr], [noexcept]

Returns the number of bits which are set. just a straight-up headcount, no drama πŸ’…


🌸 flip

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::flip ()

[inline], [constexpr], [noexcept]

Toggles every bit to its opposite value. full glow-up, all bits, no survivors ✨

Referenced by std::bitset< _Nb >::operator~().


🌈 flip (the one that takes a position)

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::flip
    (size_t __position)

[inline], [constexpr]

Toggles a given bit to its opposite value β€” just the one, main character only πŸ‘‘

Parameters

  • __position β€” The index of the bit.

Exceptions

  • std::out_of_range β€” If pos is bigger the size of the set.

πŸ’€ none

template<size_t _Nb> constexpr bool std::bitset< _Nb >::none () const

[inline], [constexpr], [noexcept]

Tests whether any of the bits are on. (yes, that's literally what the page says for this one β€” we're keeping it, no notes πŸ™ˆ)

Returns: True if none of the bits are set.


πŸ”₯ operator&=

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb
    >::operator&= (const bitset< _Nb > & __rhs)

[inline], [constexpr], [noexcept]

Operations on bitsets.

Parameters

  • __rhs β€” A same-sized bitset.

These should be self-explanatory. (the page's words, not mine, but honestly? it's right.)


⭐ operator<<

template<size_t _Nb> constexpr bitset< _Nb > std::bitset< _Nb >::operator<<
    (size_t __position) const

[inline], [constexpr], [noexcept]

Self-explanatory. short king of a description fr fr


🧚 operator<<=

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb
    >::operator<<= (size_t __position)

[inline], [constexpr], [noexcept]

Operations on bitsets.

Parameters

  • __position β€” The number of places to shift.

These should be self-explanatory.


πŸ’œ operator==

template<size_t _Nb> constexpr bool std::bitset< _Nb >::operator== (const
    bitset< _Nb > & __rhs) const

[inline], [constexpr], [noexcept]

These comparisons for equality/inequality are, well, bitwise. matching vibes, bit for bit 🫢


πŸ¦‹ operator>>

template<size_t _Nb> constexpr bitset< _Nb > std::bitset< _Nb >::operator>>
    (size_t __position) const

[inline], [constexpr], [noexcept]

Self-explanatory.


πŸ“ operator>>=

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb
    >::operator>>= (size_t __position)

[inline], [constexpr], [noexcept]

Operations on bitsets.

Parameters

  • __position β€” The number of places to shift.

These should be self-explanatory.


πŸŽ€ operator[] (non-const)

template<size_t _Nb> constexpr reference std::bitset< _Nb >::operator[]
    (size_t __position)

[inline], [constexpr]

Array-indexing support.

Parameters

  • __position β€” Index into the bitset.

Returns: A bool for a const bitset. For non-const bitsets, an instance of the reference proxy class.

Note

These operators do no range checking and throw no exceptions, as required by DR 11 to the standard.

_GLIBCXX_RESOLVE_LIB_DEFECTS β€” Note that this implementation already resolves DR 11 (items 1 and 2), but does not do the range-checking required by that DR's resolution. -pme The DR has since been changed: range-checking is a precondition (users' responsibility), and these functions must not throw. -pme

^ read that note, bestie. it's giving "we know, we know, it's the standard's fault." πŸ’€


🌸 operator[] (const)

template<size_t _Nb> constexpr bool std::bitset< _Nb >::operator[] (size_t
    __position) const

[inline], [constexpr]

Array-indexing support.

Parameters

  • __position β€” Index into the bitset.

Returns: A bool for a const bitset. For non-const bitsets, an instance of the reference proxy class.

Note

These operators do no range checking and throw no exceptions, as required by DR 11 to the standard.

_GLIBCXX_RESOLVE_LIB_DEFECTS β€” Note that this implementation already resolves DR 11 (items 1 and 2), but does not do the range-checking required by that DR's resolution. -pme The DR has since been changed: range-checking is a precondition (users' responsibility), and these functions must not throw. -pme

(yeah it's the same note, it's on both overloads, we're not skipping it the second time either 😌)


🌈 operator^=

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb
    >::operator^= (const bitset< _Nb > & __rhs)

[inline], [constexpr], [noexcept]

Operations on bitsets.

Parameters

  • __rhs β€” A same-sized bitset.

These should be self-explanatory.


✨ operator|=

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb
    >::operator|= (const bitset< _Nb > & __rhs)

[inline], [constexpr], [noexcept]

Operations on bitsets.

Parameters

  • __rhs β€” A same-sized bitset.

These should be self-explanatory.


πŸ”₯ operator~

template<size_t _Nb> constexpr bitset< _Nb > std::bitset< _Nb >::operator~
    () const

[inline], [constexpr], [noexcept]

See the no-argument flip().

References std::bitset< _Nb >::flip().


🧚 reset (no args)

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::reset ()

[inline], [constexpr], [noexcept]

Sets every bit to false. it's a total reset, everyone go home 🏠


πŸ“ reset (with a position)

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::reset
    (size_t __position)

[inline], [constexpr]

Sets a given bit to false.

Parameters

  • __position β€” The index of the bit.

Exceptions

  • std::out_of_range β€” If pos is bigger the size of the set.

Same as writing set(pos,false).


πŸ‘‘ set (no args)

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::set ()

[inline], [constexpr], [noexcept]

Sets every bit to true. everyone's invited, everyone's on πŸ’–


🌟 set (with a position and a value)

template<size_t _Nb> constexpr bitset< _Nb > & std::bitset< _Nb >::set
    (size_t __position, bool __val = true)

[inline], [constexpr]

Sets a given bit to a particular value.

Parameters

  • __position β€” The index of the bit.
  • __val β€” Either true or false, defaults to true.

Exceptions

  • std::out_of_range β€” If pos is bigger the size of the set.

πŸ¦‹ size

template<size_t _Nb> constexpr size_t std::bitset< _Nb >::size () const

[inline], [constexpr], [noexcept]

Returns the total number of bits. the whole headcount, not just the ones that showed up πŸ’…


πŸ’œ test

template<size_t _Nb> constexpr bool std::bitset< _Nb >::test (size_t
    __position) const

[inline], [constexpr]

Tests the value of a bit.

Parameters

  • __position β€” The index of a bit.

Returns: The value at pos.

Exceptions

  • std::out_of_range β€” If pos is bigger the size of the set.

πŸŽ€ to_string

template<size_t _Nb> template<class _CharT , class _Traits , class _Alloc >
    constexpr std::basic_string< _CharT, _Traits, _Alloc > std::bitset< _Nb
    >::to_string () const

[inline], [constexpr]

Returns a character interpretation of the bitset.

Returns: The string equivalent of the bits.

Note the ordering of the bits: decreasing character positions correspond to increasing bit positions (see the main class notes for an example). yes this is the part everyone gets backwards, write it on your hand ✍️

🌈 to_ulong

template<size_t _Nb> constexpr unsigned long std::bitset< _Nb >::to_ulong ()
    const

[inline], [constexpr]

Returns a numerical interpretation of the bitset.

Returns: The integral equivalent of the bits.

Exceptions

  • std::overflow_error β€” If there are too many bits to be represented in an unsigned long.
⚠️ that overflow one is real, bestie β€” if your bitset is too chunky for an unsigned long, it throws std::overflow_error. no silent nonsense, it just says no.

πŸ“š AUTHOR

Generated automatically by Doxygen for libstdc++ from the source code. (not a human, just a robot doing its little robot thing πŸ€–βœ¨)


and that's the whole page, bestie!! every function, every exception, every note, every -pme 🫢 this beauty came to you straight from libstdc++, page std::bitset< _Nb >(3cxx) β€” go forth and flip some bits, you absolute icon πŸ’…πŸ‘‘β­

πŸ“¦ where this page comes from