Partilhar via


Classe bitset

Descreve um tipo de objeto que armazena uma sequência que consiste em um número fixo de bits que fornecem uma maneira compacta de manter sinalizadores para um conjunto de itens ou condições. A classe bitset dá suporte a operações em objetos do tipo bitset que contêm uma coleção de bits e fornecem acesso constante a cada bit.

Sintaxe

template <size_t N>
class bitset

Parâmetros

N
Especifica o número de bits no objeto bitset com um inteiro diferente de zero do tipo size_t que precisa ser conhecido no tempo de compilação.

Comentários

Ao contrário da classe vector<bool> semelhante, a classe bitset não tem iteradores e não é um contêiner da Biblioteca Padrão C++. Ela também é diferente de vector<bool> por ser de um tamanho específico que é fixado no tempo de compilação de acordo com o tamanho especificado pelo parâmetro de modelo N quando o bitset<N> é declarado.

Um bit será definido se seu valor for 1 e redefinido se seu valor for 0. Virar ou inverter um bit é alterar seu valor de 1 para 0 ou de 0 para 1. Os N bits em um bitset são indexados por valores inteiros de 0 a N - 1, em que 0 indexa a posição do primeiro bit e N - 1 a posição do bit final.

Membros

Construtores

Nome Descrição
bitset Constrói um objeto da classe bitset<N> e inicializa os bits como zero, para algum valor especificado ou para valores obtidos dos caracteres em uma cadeia de caracteres.

Typedefs

Nome Descrição
element_type Um tipo que é um sinônimo do tipo de dados bool e pode ser usado para referenciar os bits de elemento em um bitset.

Funções

Nome Descrição
all Testa todos os bits nesse bitset para determinar se eles estão todos definidos como true.
any A função membro testa se qualquer bit na sequência está definido como 1.
count A função membro retorna o número de bits definido na sequência de bits.
flip Inverte o valor de todos os bits em um bitset ou inverte um único bit em uma posição especificada.
none Testa se nenhum bit foi definido como 1 em um objeto bitset.
reset Redefine todos os bits em um bitset como 0 ou redefine um bit em uma posição especificada como 0.
set Define todos os bits em um bitset como 1 ou define um bit em uma posição especificada como 1.
size Retorna o número de bits em um objeto bitset.
test Testa se o bit em uma posição especificada em um bitset está definido como 1.
to_string Converte um objeto bitset em uma representação de cadeia de caracteres.
to_ullong Retorna a soma dos valores de no bitset como um unsigned long long.
to_ulong Converte um objeto bitset no unsigned long que geraria a sequência de bits contidos se fosse usado para inicializar o bitset.

Classes

Nome Descrição
reference Uma classe de proxy que fornece referências aos bits contidos em um bitset que é usado para acessar e manipular os bits individuais como uma classe auxiliar do operator[] da classe bitset.

Operadores

Nome Descrição
operator!= Testa um bitset de destino quanto à desigualdade em relação a um bitset especificado.
operator&= Executa uma combinação bit a bit de bitsets com a operação lógica "and" (&) bit a bit.
operator<< Desloca os bits em um bitset um número especificado de posições à esquerda e retorna o resultado para um novo bitset.
operator<<= Desloca os bits em um bitset um número especificado de posições à esquerda e retorna o resultado para o bitset de destino.
operator== Testa um bitset de destino quanto à igualdade em relação a um bitset especificado.
operator>> Desloca os bits em um bitset um número especificado de posições à direita e retorna o resultado para um novo bitset.
operator>>= Desloca os bits em um bitset um número especificado de posições à direita e retorna o resultado para o bitset de destino.
operator[] Retornará uma referência a um bit em uma posição especificada em um bitset se o bitset for modificável, caso contrário, retornará o valor do bit nessa posição.
operator^= Executa uma combinação bit a bit de bitsets com a operação lógica "xor" (^) bit a bit.
operator|= Executa uma combinação bit a bit de bitsets com a operação lógica "or" (|) bit a bit.
operator~ Inverte todos os bits em um bitset de destino e retorna o resultado.

Estruturas

Nome Descrição
hash

all

Testa todos os bits nesse bitset para determinar se todos estão definidos como true.

bool all() const;

Valor de retorno

Retornará true se todos os bits nesse conjunto forem true. Retornará false se um ou mais bits forem false.

any

Testa se algum bit na sequência está definido como 1.

bool any() const;

Valor de retorno

true se algum bit no bitset estiver definido como 1, false se todos os bits forem 0.

Exemplo

// bitset_any.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 6 );
   bool b, rb;

   cout << "The original bitset b1( 6 ) is: ( "<< b1 << " )"
        << endl;

   b = b1.any ( );

   if ( b )
      cout << "At least one of the bits in bitset is set to 1."
           << endl;
   else
      cout << "None of the bits in bitset are set to 1."
           << endl;

   bitset<5> rb1;
   rb1 = b1.reset ( );

   cout << "The reset bitset is: ( "<< b1 << " )"
        << endl;

   rb = rb1.any ( );

   if ( rb )
      cout << "At least one of the bits in the reset bitset "
           << "are set to 1." << endl;
   else
      cout << "None of the bits in bitset b1 are set to 1."
           << endl;
}
The original bitset b1( 6 ) is: ( 00110 )
At least one of the bits in bitset is set to 1.
The reset bitset is: ( 00000 )
None of the bits in bitset b1 are set to 1.

bitset

Constrói um objeto da classe bitset<N> e inicializa os bits como zero, como algum valor especificado ou como os valores obtidos dos caracteres em uma cadeia de caracteres.

1) constexpr bitset();
2) bitset(unsigned long val);
3) constexpr bitset(unsigned long long val);
4) template <class CharType, class Traits, class Allocator>
    explicit bitset(
        const basic_string<CharType, Traits, Allocator>& str,
        typename basic_string<CharType, Traits, Allocator>::size_type pos = 0);
    
5) template <class CharType, class Traits, class Allocator>
    explicit bitset(
        const basic_string<CharType, Traits, Allocator>& str,
        typename basic_string<CharType, Traits, Allocator>::size_type pos,
        typename basic_string<CharType, Traits, Allocator>::size_type count,
        CharType Zero = CharType ('0'),
        CharType One = CharType ('1'));
    
6) template<class CharType>
    explicit bitset(
        const CharType* str,
        typename basic_string<CharType>::size_type
        n = basic_string<CharType>::npos,
        CharType zero = CharType('0'),
        CharType one = CharType('1'));

Parâmetros

val
O inteiro sem sinal cuja representação de base dois é usada para inicializar os bits no bitset que está sendo construído.

str
A cadeia de caracteres de zeros e uns usada para inicializar os valores de bits do bitset.

pos
A posição do caractere na cadeia de caracteres, contando da esquerda para a direita e começando com zero, usada para inicializar o primeiro bit no bitset.

count
O número de caracteres na cadeia de caracteres que é usado para fornecer os valores iniciais dos bits no bitset.

Zero
O caractere que é usado para representar um zero. O padrão é '0'.

One
O caractere que é usado para representar um. O padrão é '1'.

Comentários

1) Constrói um objeto da classe bitset<N> e inicializa todos os N bits com um valor padrão igual a zero.

2-3) Constrói um objeto da classe bitset<N> e inicializa os bits do parâmetro val.

4) Constrói um objeto da classe bitset<N> e inicializa os bits dos caracteres fornecidos em uma cadeia de caracteres de zeros e uns. Se algum caractere da cadeia de caracteres for diferente de 0 ou 1, o construtor gerará um objeto da classe invalid argument. Se a posição especificada (pos) estiver além do comprimento da cadeia de caracteres, o construtor gerará um objeto da classe out_of_range. O construtor apenas define os bits na posição j no bitset cujo caractere na cadeia de caracteres na posição pos + j é 1. Por padrão, pos é 0.

5) Semelhante a 4), mas inclui outro parâmetro, count, que especifica o número de bits a serem inicializados. Ele também tem dois parâmetros opcionais, _Zero e _One, que indicam qual caractere em str deve ser interpretado como um bit 0 e um bit 1, respectivamente.

6) Constrói um objeto da classe bitset<N>, inicializando os N bits com os valores que correspondem aos caracteres fornecidos em uma cadeia de caracteres do estilo C de zeros e uns. Chame o construtor sem converter a cadeia de caracteres em um tipo de cadeia de caracteres, por exemplo: bitset<5> b5("01011");

Exemplo

// bitset_bitset.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   // Using the default constructor
   using namespace std;
   bitset<2> b0;
   cout << "The set of bits in bitset<2> b0 is: ( "
        << b0 << " )." << endl;

   // Using the second member function
   bitset<5> b1 ( 6 );
   cout << "The set of bits in bitset<5> b1( 6 ) is: ( "
        << b1 << " )." << endl;

   // The template parameter N can be an expression
   bitset< 2 * sizeof ( int ) > b2;
   cout << "The set of bits in bitset< 2 * sizeof ( int ) > b2 is: ( "
        << b2 << " )." << endl;

   // The base two representation will be truncated
   // if its length exceeds the size of the bitset
   bitset<3> b3 ( 6 );
   cout << "The set of bits in bitset<3> b3( 6 ) is ( "
        << b3 << " )." << endl;

   // Using a c-style string to initialize the bitset
    bitset<7> b3andahalf ( "1001001" );
    cout << "The set of bits in bitset<7> b3andahalf ( \"1001001\" )"
         << " is ( " << b3andahalf << " )." << endl;

   // Using the fifth member function with the first parameter
   string bitval4 ( "10011" );
   bitset<5> b4 ( bitval4 );
   cout << "The set of bits in bitset<5> b4( bitval4 ) is ( "
        << b4 << " )." << endl;

   // Only part of the string may be used for initialization

   // Starting at position 3 for a length of 6 (100110)
   string bitval5 ("11110011011");
   bitset<6> b5 ( bitval5, 3, 6 );
   cout << "The set of bits in bitset<11> b5( bitval, 3, 6 ) is ( "
        << b5 << " )." << endl;

   // The bits not initialized with part of the string
   // will default to zero
   bitset<11> b6 ( bitval5, 3, 5 );
   cout << "The set of bits in bitset<11> b6( bitval5, 3, 5 ) is ( "
        << b6 << " )." << endl;

   // Starting at position 2 and continue to the end of the string
   bitset<9> b7 ( bitval5, 2 );
   cout << "The set of bits in bitset<9> b7( bitval, 2 ) is ( "
        << b7 << " )." << endl;
}
The set of bits in bitset<2> b0 is: ( 00 ).
The set of bits in bitset<5> b1( 6 ) is: ( 00110 ).
The set of bits in bitset<2 * sizeof ( int ) > b2 is: ( 00000000 ).
The set of bits in bitset<3> b3( 6 ) is ( 110 ).
The set of bits in bitset<5> b4( bitval4 ) is ( 10011 ).
The set of bits in bitset<11> b5( bitval, 3, 6 ) is ( 100110 ).
The set of bits in bitset<11> b6( bitval5, 3, 5 ) is ( 00000010011 ).
The set of bits in bitset<9> b7( bitval, 2 ) is ( 110011011 ).

count

Retorna o número de bits definidos na sequência de bits.

size_t count() const;

Valor de retorno

O número de bits definidos na sequência de bits.

Exemplo

// bitset_count.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
    using namespace std;

    bitset<5> b1(4);

    cout << "The collection of bits in the original bitset is: ( "
         << b1 << " )" << endl;

    size_t i;
    i = b1.count();
    cout << "The number of bits in the bitset set to 1 is: "
         << i << "." << endl;

    bitset<5> fb1;
    fb1 = b1.flip();

    cout << "The collection of flipped bits in the modified bitset "
         << "is: ( " << b1 << " )" << endl;

    size_t ii;
    ii = fb1.count();
    cout << "The number of bits in the bitset set to 1 is: "
         << ii << "." << endl;
}
The collection of bits in the original bitset is: ( 00100 )
The number of bits in the bitset set to 1 is: 1.
The collection of flipped bits in the modified bitset is: ( 11011 )
The number of bits in the bitset set to 1 is: 4.

element_type

Um tipo que é um sinônimo do tipo de dados bool e pode ser usado para referenciar os bits de elemento em um bitset.

typedef bool element_type;

Exemplo

// bitset_elem_type.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<3> b1 ( 2 );
   cout << "Original bitset b1(6) is: ( "<< b1 << " )"
        << endl;

   //Compare two ways to reference bits in a bitset
   bool b;
   bitset<5>::element_type e;

   b = b1.test ( 2 );
   if ( b )
      cout << "The bit at position 2 of bitset b1"
           << "has a value of 1." << endl;
   else
      cout << "The bit at position 2 of bitset b1"
           << "has a value of 0." << endl;
   b1[2] = 1;
   cout << "Bitset b1 modified by b1[2] = 1 is: ( "<< b1 << " )"
        << endl;

   e = b1.test ( 2 );
   if ( e )
      cout << "The bit at position 2 of bitset b1"
           << "has a value of 1." << endl;
   else
      cout << "The bit at position 2 of bitset b1"
           << "has a value of 0." << endl;
}
Original bitset b1(6) is: ( 010 )
The bit at position 2 of bitset b1has a value of 0.
Bitset b1 modified by b1[2] = 1 is: ( 110 )
The bit at position 2 of bitset b1has a value of 1.

flip

Inverte o valor de todos os bits em um bitset ou inverte um único bit em uma posição especificada.

bitset<N>& flip();
bitset<N>& flip(size_t pos);

Parâmetros

pos
A posição do bit cujo valor deve ser invertido.

Valor de retorno

Uma cópia do bitset modificado para o qual a função membro foi invocada.

Comentários

A segunda função membro gera uma exceção out_of_range quando a posição especificada como um parâmetro é maior que o tamanho N do bitset<N> cujo bit foi invertido.

Exemplo

// bitset_flip.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 6 );

   cout << "The collection of bits in the original bitset is: ( "
        << b1 << " )" << endl;

   bitset<5> fb1;
   fb1 = b1.flip ( );

   cout << "After flipping all the bits, the bitset becomes: ( "
        << fb1 << " )" << endl;

   bitset<5> f3b1;
   f3b1 = b1.flip ( 3 );

   cout << "After flipping the fourth bit, the bitset becomes: ( "
        << f3b1 << " )" << endl << endl;

   bitset<5> b2;
   int i;
   for ( i = 0 ; i <= 4 ; i++ )
   {
      b2.flip(i);
      cout << b2 << "  The bit flipped is in position "
           << i << ".\n";
   }
}
The collection of bits in the original bitset is: ( 00110 )
After flipping all the bits, the bitset becomes: ( 11001 )
After flipping the fourth bit, the bitset becomes: ( 10001 )

00001  The bit flipped is in position 0.
00011  The bit flipped is in position 1.
00111  The bit flipped is in position 2.
01111  The bit flipped is in position 3.
11111  The bit flipped is in position 4.

hash

template <class T> struct hash;
template <size_t N> struct hash<bitset<N>>;

nenhum

Testa se nenhum bit foi definido como 1 em um objeto bitset.

bool none() const;

Valor de retorno

true se nenhum bit no bitset tiver sido definido como 1, false se pelo menos um bit foi definido como 1.

Exemplo

// bitset_none.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 6 );
   bool b, rb;

   cout << "Original bitset b1(6) is: ( " << b1 << " )"
        << endl;

   b = b1.none ( );

   if ( b )
      cout << "None of the bits in bitset b1 are set to 1."
           << endl;
   else
      cout << "At least one of the bits in bitset b1 is set to 1."
           << endl;

   bitset<5> rb1;
   rb1 = b1.reset ( );
   rb = rb1.none ( );
   if ( rb )
      cout << "None of the bits in bitset b1 are set to 1."
           << endl;
   else
      cout << "At least one of the bits in bitset b1 is set to 1."
           << endl;
}
Original bitset b1(6) is: ( 00110 )
At least one of the bits in bitset b1 is set to 1.
None of the bits in bitset b1 are set to 1.

operator!=

Testa um conjunto de bits de destino quanto à desigualdade em relação a um bitset especificado.

bool operator!=(const bitset<N>& right) const;

Parâmetros

right
O bitset a ser comparado com o bitset de destino quanto à desigualdade.

Valor de retorno

true se os bitsets forem diferentes, false se eles forem iguais.

Comentários

Os bitsets precisam ter o mesmo tamanho.

Exemplo

// bitset_op_NE.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );
   bitset<5> b2 ( 7 );
   bitset<5> b3 ( 2 );
   bitset<4> b4 ( 7 );

   if ( b1 != b2 )
      cout << "Bitset b1 is different from bitset b2." << endl;
   else
      cout << "Bitset b1 is the same as bitset b2." << endl;

   if ( b1 != b3 )
      cout << "Bitset b1 is different from bitset b3." << endl;
   else
      cout << "Bitset b1 is the same as bitset b3." << endl;

   // This would cause an error because bitsets must have the
   // same size to be tested
   // if ( b1 != b4 )
   //   cout << "Bitset b1 is different from bitset b4." << endl;
   // else
   //   cout << "Bitset b1 is the same as bitset b4." << endl;
}
Bitset b1 is the same as bitset b2.
Bitset b1 is different from bitset b3.

operator&=

Executa uma combinação bit a bit de bitsets com a operação lógica "and" (&) bit a bit.

bitset<N>& operator&=(const bitset<N>& right);

Parâmetros

right
O bitset que deve ser combinado bit a bit com o bitset de destino.

Valor de retorno

O bitset de destino modificado que resulta da operação "and" (&) bit a bit com o bitset especificado como um parâmetro.

Comentários

Dois bits combinados pelo operador AND retornarão true se cada bit for true, caso contrário, a combinação retornará false.

Os dois bitsets precisam ter o mesmo tamanho.

Exemplo

// bitset_op_bitwise.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );
   bitset<5> b2 ( 11 );
   bitset<4> b3 ( 7 );

   cout << "The target bitset b1 is:    ( "<< b1 << " )." << endl;
   cout << "The parameter bitset b2 is: ( "<< b2 << " )." << endl;
   cout << endl;

   b1 &= b2;
   cout << "After bitwise AND combination,\n"
        << "the target bitset b1 becomes:   ( "<< b1 << " )."
        << endl;

   // Note that the parameter-specified bitset is unchanged
   cout << "The parameter bitset b2 remains: ( "<< b2 << " )."
        << endl;

   // The following would cause an error because the bisets
   // must be of the same size to be combined
   // b1 &= b3;
}
The target bitset b1 is:    ( 00111 ).
The parameter bitset b2 is: ( 01011 ).

After bitwise AND combination,
the target bitset b1 becomes:   ( 00011 ).
The parameter bitset b2 remains: ( 01011 ).

operator<<

Desloca os bits em um bitset um número especificado de posições à esquerda e retorna o resultado para um novo bitset.

bitset<N> operator<<(size_t pos) const;

Parâmetros

pos
O número de posições à esquerda que os bits no bitset devem ser deslocados.

Valor de retorno

O bitset modificado com os bits deslocados o número necessário de posições à esquerda.

Comentários

A função membro de operador retorna bitset(*this) <<= pos, em que <<= desloca os bits em um bitset um número especificado de posições à esquerda e retorna o resultado ao bitset de destino.

Exemplo

// bitset_op_LS.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );

   cout << "The bitset b1 is: ( "<< b1 << " )." << endl;

   bitset<5> b2;
   b2 = b1 << 2;

   cout << "After shifting the bits 2 positions to the left,\n"
        << " the bitset b2 is: ( "<< b2 << " )."
        << endl;

   bitset<5> b3 = b2 >> 1;

   cout << "After shifting the bits 1 position to the right,\n"
        << " the bitset b3 is: ( " << b3 << " )."
        << endl;
}

operator<<=

Desloca os bits em um bitset um número especificado de posições à esquerda e retorna o resultado para o bitset de destino.

bitset<N>& operator<<=(size_t pos);

Parâmetros

pos
O número de posições para a esquerda que os bits no bitset devem ser deslocados.

Valor de retorno

O bitset de destino modificado de maneira que os bits foram deslocados o número necessário de posições à esquerda.

Comentários

Se não existir nenhum elemento na posição, a função limpará o bit para o valor 0.

Exemplo

// bitset_op_LSE.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 7 );
   cout << "The target bitset b1 is: ( "<< b1 << " )." << endl;
   b1 <<= 2;
   cout << "After shifting the bits 2 positions to the left,\n"
        << "the target bitset b1 becomes: ( "<< b1 << " )."
        << endl;
}
The target bitset b1 is: ( 00111 ).
After shifting the bits 2 positions to the left,
the target bitset b1 becomes: ( 11100 ).

operator==

Testa um bitset de destino quanto à igualdade com um bitset especificado.

bool operator==(const bitset<N>& right) const;

Parâmetros

right
O bitset a ser comparado com o bitset de destino quanto à igualdade.

Valor de retorno

true se os bitsets forem iguais, false se eles forem diferentes.

Comentários

Os bitsets precisam ter o mesmo tamanho.

Exemplo

// bitset_op_EQ.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 7 );
   bitset<5> b2 ( 7 );
   bitset<5> b3 ( 2 );
   bitset<4> b4 ( 7 );

   if ( b1 == b2 )
      cout << "Bitset b1 is the same as bitset b2." << endl;
   else
      cout << "Bitset b1 is different from bitset b2." << endl;

   if ( b1 == b3 )
      cout << "Bitset b1 is the same as bitset b3." << endl;
   else
      cout << "Bitset b1 is different from bitset b3." << endl;

   // This would cause an error because bitsets must have the
   // same size to be tested
   // if ( b1 == b4 )
   //   cout << "Bitset b1 is the same as bitset b4." << endl;
   // else
   //   cout << "Bitset b1 is different from bitset b4." << endl;
}
Bitset b1 is the same as bitset b2.
Bitset b1 is different from bitset b3.

operator>>

Desloca os bits em um bitset um número especificado de posições à direita e retorna o resultado para um novo bitset.

bitset<N> operator>>(size_t pos) const;

Parâmetros

pos
O número de posições à direita que os bits no bitset devem ser deslocados.

Valor de retorno

Um novo bitset para o qual os bits foram deslocados à direita um número necessário de posições relativas ao bitset de destino.

Exemplo

// bitset_op_RS.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 7 );
   cout << "The bitset b1 is: ( "<< b1 << " )." << endl;

   bitset<5> b2;
   b2 = b1 << 2;

   cout << "After shifting the bits 2 positions to the left,\n"
        << "the bitset b2 is: ( "<< b2 << " )."
        << endl;
   bitset<5> b3 = b2 >> 1;

   cout << "After shifting the bits 1 position to the right,\n"
        << "the bitset b3 is: ( " << b3 << " )."
        << endl;
}
The bitset b1 is: ( 00111 ).
After shifting the bits 2 positions to the left,
the bitset b2 is: ( 11100 ).
After shifting the bits 1 position to the right,
the bitset b3 is: ( 01110 ).

operator>>=

Desloca os bits em um bitset um número especificado de posições à direita e retorna o resultado para o bitset de destino.

bitset<N>& operator>>=(size_t pos);

Parâmetros

pos
O número de posições à direita que os bits no bitset devem ser deslocados.

Valor de retorno

O bitset de destino modificado com os bits deslocados o número necessário de posições à direita.

Comentários

Se não existir nenhum elemento na posição, a função limpará o bit para o valor 0.

Exemplo

// bitset_op_RSE.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 28 );
   cout << "The target bitset b1 is: ( "<< b1 << " )." << endl;

   b1 >>= 2;
   cout << "After shifting the bits 2 positions to the right,\n"
        << "the target bitset b1 becomes: ( "<< b1 << " )."
        << endl;
}
The target bitset b1 is: ( 11100 ).
After shifting the bits 2 positions to the right,
the target bitset b1 becomes: ( 00111 ).

operator[]

Retornará uma referência a um bit em uma posição especificada em um bitset se o bitset for modificável, caso contrário, retornará o valor do bit nessa posição.

bool operator[](size_t pos) const;
reference operator[](size_t pos);

Parâmetros

pos
A posição que localiza o bit dentro do bitset.

Comentários

Quando você definir _ITERATOR_DEBUG_LEVEL como 1 ou 2 no build, um erro de runtime ocorrerá em seu executável se você tentar acessar um elemento fora dos limites do bitset. Para obter mais informações, consulte Iteradores verificados.

Exemplo

// bitset_op_REF.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bool b;
   bitset<5> b1 ( 6 );
   cout << "The initialized bitset<5> b1( 2 ) is: ( "<< b1 << " )."
        << endl;

   int i;
   for ( i = 0 ; i <= 4 ; i++ )
   {
      b = b1[ i ];
      cout << "  The bit in position "
           << i << " is " << b << ".\n";
   }
}

operator^=

Executa uma combinação bit a bit de bitsets com a operação lógica "xor" (^) bit a bit.

bitset<N>& operator^=(const bitset<N>& right);

Parâmetros

right
O bitset que deve ser combinado bit a bit com o bitset de destino.

Valor de retorno

O bitset de destino modificado que resulta da operação "xor" bit a bit (^) com o bitset especificado como um parâmetro.

Comentários

Dois bits combinados pelo operador "xor" (^) exclusivo retornam true se pelo menos um, mas não os dois bits são true, caso contrário, a combinação retorna false.

Os bitsets precisam ter o mesmo tamanho.

Exemplo

// bitset_op_bitwiseOR.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;
   bitset<5> b1 ( 7 );
   bitset<5> b2 ( 11 );
   bitset<4> b3 ( 7 );

   cout << "The target bitset b1 is:    ( "<< b1 << " )." << endl;
   cout << "The parameter bitset b2 is: ( "<< b2 << " )." << endl;
   cout << endl;

   b1 ^= b2;
   cout << "After bitwise exclusive OR combination,\n"
        << "the target bitset b1 becomes:   ( "<< b1 << " )."
        << endl;

   // Note that the parameter-specified bitset in unchanged
   cout << "The parameter bitset b2 remains: ( "<< b2 << " )."
        << endl;

   // The following would cause an error because the bitsets
   // must be of the same size to be combined
   // b1 |= b3;
}
The target bitset b1 is:    ( 00111 ).
The parameter bitset b2 is: ( 01011 ).

After bitwise exclusive OR combination,
the target bitset b1 becomes:   ( 01100 ).
The parameter bitset b2 remains: ( 01011 ).

operator|=

Combina dois bitsets usando a operação bit a bit "or" (|).

bitset<N>& operator|=(const bitset<N>& right);

Parâmetros

right
O bitset que deve ser combinado bit a bit com o bitset de destino.

Valor de retorno

O bitset de destino modificado que resulta da operação "or" (|) bit a bit com o bitset especificado como um parâmetro.

Comentários

Dois bits combinados pelo operador OR inclusivo retornarão true se pelo menos um dos bits for true. Se os dois bits forem false, a combinação deles retornará false.

Os bitsets precisam ter o mesmo tamanho.

Exemplo

// bitset_op_BIO.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );
   bitset<5> b2 ( 11 );
   bitset<4> b3 ( 7 );

   cout << "The target bitset b1 is:    ( "<< b1 << " )." << endl;
   cout << "The parameter bitset b2 is: ( "<< b2 << " )." << endl;
   cout << endl;

   b1 |= b2;
   cout << "After bitwise inclusive OR combination,\n"
        << "the target bitset b1 becomes:   ( "<< b1 << " )."
        << endl;

   // Note that the parameter-specified bitset in unchanged
   cout << "The parameter bitset b2 remains: ( "<< b2 << " )."
        << endl;

   // The following would cause an error because the bisets
   // must be of the same size to be combined
   // b1 |= b3;
}
The target bitset b1 is:    ( 00111 ).
The parameter bitset b2 is: ( 01011 ).

After bitwise inclusive OR combination,
the target bitset b1 becomes:   ( 01111 ).
The parameter bitset b2 remains: ( 01011 ).

operator~

Inverte todos os bits em um bitset de destino e retorna o resultado.

bitset<N> operator~() const;

Valor de retorno

O bitset com todos os bits dele invertidos em relação ao bitset de destino.

Exemplo

// bitset_op_invert.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <bitset>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );
   bitset<5> b2;
   b2 = ~b1;

   cout << "Bitset b1 is: ( "<< b1 << " )." << endl;
   cout << "Bitset b2 = ~b1 is: ( "<< b2 << " )." << endl;

   // These bits could also be flipped using the flip member function
   bitset<5> b3;
   b3 = b1.flip( );
   cout << "Bitset b3 = b1.flip( ) is: ( "<< b2 << " )." << endl;
}
Bitset b1 is: ( 00111 ).
Bitset b2 = ~b1 is: ( 11000 ).
Bitset b3 = b1.flip( ) is: ( 11000 ).

reference

Uma classe de proxy que fornece referências aos bits contidos em um bitset que é usado para acessar e manipular os bits individuais como uma classe auxiliar do operator[] da classe bitset.

class reference {
   friend class bitset<N>;
public:
   reference& operator=(bool val);
   reference& operator=(const reference& bitref);
   bool operator~() const;
   operator bool() const;
   reference& flip();
};

Parâmetros

val
O valor do objeto do tipo bool a ser atribuído a um bit em um bitset.

bitref
Uma referência da forma x [ i ] ao bit na posição i em bitset x.

Valor de retorno

Uma referência ao bit no bitset especificado pela posição do argumento da primeira, da segunda e da quinta função membro de referência de classe e true ou false para refletir o valor do bit modificado no bitset da terceira e da quarta funções membro de referência de classe.

Comentários

A classe reference existe apenas como uma classe auxiliar para o bitset operator[]. A classe member descreve um objeto que pode acessar um bit individual em um bitset. Permita que b seja um objeto do tipo bool, x e y sejam objetos do tipo bitset<N>, e i e j sejam posições válidas dentro desse objeto. A notação x [i] referencia o bit na posição i no bitset x. As funções membro da classe reference fornecem, em ordem, as seguintes operações:

Operação Definição
x[i] = b Armazena o valor bool b na posição de bit i no bitset x.
x[i] = y[j] Armazena o valor do bit y[ j] na posição de bit i no bitset x.
b = ~ x[i] Armazena o valor invertido do bit x[ i] em bool b.
b = x[i] Armazena o valor do bit x[ i] em bool b.
x[i]. flip( ) Armazena o valor invertido do bit x[ i] novamente na posição de bit i em x.

Exemplo

// bitset_reference.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 2 );
   bitset<5> b2 ( 6 );
   cout << "The initialized bitset<5> b1( 2 ) is: ( "<< b1 << " )."
        << endl;
   cout << "The initialized bitset<5> b2( 6 ) is: ( "<< b2 << " )."
        << endl;

   // Example of x [i] = b storing bool b at bit position i
   // in bitset x
   b1[ 0 ] = true;
   cout << "The bitset<5> b1 with the bit at position 0 set to 1"
        << "is: ( "<< b1 << " )" << endl;

   // Example of x [i] = y [j] storing the bool value of the
   // bit at position j in bitset y at bit position i in bitset x
   b2 [4] = b1 [0];      // b1 [0] = true
   cout << "The bitset<5> b2 with the bit at position 4 set to the "
        << "value\nof the bit at position 0 of the bit in "
        << "bitset<5> b1 is: ( "<<  b2  << " )" << endl;

   // Example of b = ~x [i] flipping the value of the bit at
   // position i of bitset x and storing the value in an
   // object b of type bool
   bool b = ~b2 [4];      // b2 [4] = false
   if ( b )
      cout << "The value of the object b = ~b2 [4] "
           << "of type bool is true." << endl;
   else
      cout << "The value of the object b = ~b2 [4] "
           << "of type bool is false." << endl;

   // Example of b = x [i] storing the value of the bit at
   // position i of bitset x in the object b of type bool
   b = b2 [4];
   if ( b )
      cout << "The value of the object b = b2 [4] "
           << "of type bool is true." << endl;
   else
      cout << "The value of the object b = b2 [4] "
           << "of type bool is false." << endl;

   // Example of x [i] . flip ( ) toggling the value of the bit at
   // position i of bitset x
   cout << "Before flipping the value of the bit at position 4 in "
        << "bitset b2,\nit is ( "<<  b2  << " )." << endl;
   b2 [4].flip( );
   cout << "After flipping the value of the bit at position 4 in "
        << "bitset b2,\nit becomes ( "<<  b2  << " )." << endl;
   bool c;
   c = b2 [4].flip( );
   cout << "After a second flip, the value of the position 4 "
        << "bit in b2 is now: " << c << ".";
}
The initialized bitset<5> b1( 2 ) is: ( 00010 ).
The initialized bitset<5> b2( 6 ) is: ( 00110 ).
The bitset<5> b1 with the bit at position 0 set to 1 is: ( 00011 )
The bitset<5> b2 with the bit at position 4 set to the value
of the bit at position 0 of the bit in bitset<5> b1 is: ( 10110 )
The value of the object b = ~b2 [4] of type bool is false.
The value of the object b = b2 [4] of type bool is true.
Before flipping the value of the bit at position 4 in bitset b2,
it is ( 10110 ).
After flipping the value of the bit at position 4 in bitset b2,
it becomes ( 00110 ).
After a second flip, the value of the position 4 bit in b2 is now: 1.

reset

Redefine todos os bits em um bitset como 0 ou redefine um bit em uma posição especificada como 0.

bitset<N>& reset();
bitset<N>& reset(size_t pos);

Parâmetros

pos
A posição do bit no bitset a ser redefinido como 0.

Valor de retorno

Uma cópia do bitset para o qual a função membro foi invocada.

Comentários

A segunda função membro gera uma exceção out_of_range quando a posição especificada é maior que o tamanho do bitset.

Exemplo

// bitset_reset.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 13 );
   cout << "The set of bits in bitset<5> b1(13) is: ( "<< b1 << " )"
        << endl;

   bitset<5> b1r3;
   b1r3 = b1.reset( 2 );
   cout << "The collection of bits obtained from resetting the\n"
        << "third bit of bitset b1 is: ( "<< b1r3 << " )"
        << endl;

   bitset<5> b1r;
   b1r = b1.reset( );
   cout << "The collecion of bits obtained from resetting all\n"
        << "the elements of the bitset b1 is: ( "<< b1r << " )"
        << endl;
}
The set of bits in bitset<5> b1(13) is: ( 01101 )
The collecion of bits obtained from resetting the
third bit of bitset b1 is: ( 01001 )
The collecion of bits obtained from resetting all
the elements of the bitset b1 is: ( 00000 )

set

Define todos os bits em um bitset como 1 ou define um bit em uma posição especificada como 1.

bitset<N>& set();

bitset<N>& set(
    size_t pos,
    bool val = true);

Parâmetros

pos
A posição do bit no bitset a ser definido como o valor atribuído.

val
O valor a ser atribuído ao bit na posição especificada.

Valor de retorno

Uma cópia do bitset para o qual a função membro foi invocada.

Comentários

A segunda função membro gera uma exceção out_of_range quando a posição especificada é maior que o tamanho do bitset.

Exemplo

// bitset_set.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 6 );
   cout << "The set of bits in bitset<5> b1(6) is: ( "<< b1 << " )"
        << endl;

   bitset<5> b1s0;
   b1s0 = b1.set( 0 );
   cout << "The collecion of bits obtained from setting the\n"
        << "zeroth bit of bitset b1 is: ( "<< b1s0 << " )"
        << endl;

   bitset<5> bs1;
   bs1 = b1.set( );
   cout << "The collecion of bits obtained from setting all the\n"
        << "elements of the bitset b1 is: ( "<< bs1 << " )"
        << endl;
}
The set of bits in bitset<5> b1(6) is: ( 00110 )
The collecion of bits obtained from setting the
zeroth bit of bitset b1 is: ( 00111 )
The collecion of bits obtained from setting all the
elements of the bitset b1 is: ( 11111 )

size

Retorna o número de bits em um objeto bitset.

size_t size() const;

Valor de retorno

O número de bits, N, em um bitset<N>.

Exemplo

// bitset_size.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main()
{
    using namespace std;

    bitset<5> b1(6);
    size_t i;

    cout << "The set of bits in bitset<5> b1( 6 ) is: ( "<< b1 << " )"
         << endl;

    i = b1.size();

    cout << "The number of bits in bitset b1 is: " << i << "."
         << endl;
}
The set of bits in bitset<5> b1( 6 ) is: ( 00110 )
The number of bits in bitset b1 is: 5.

test

Testa se o bit em uma posição especificada em um bitset está definido como 1.

bool test(size_t pos) const;

Parâmetros

pos
A posição do bit no bitset a ser testado quanto ao valor dele.

Valor de retorno

true se o bit especificado pela posição de argumento estiver definido como 1, caso contrário, false.

Comentários

A função membro gera um out_of_range

to_string

Converte um objeto bitset em uma representação de cadeia de caracteres.

template <class charT = char, class traits = char_traits<charT>, class Allocator = allocator<charT> >
   basic_string<charT, traits, Allocator> to_string(charT zero = charT('0'), charT one = charT('1')) const;

Valor retornado

Um objeto de cadeia de caracteres de classe basic_string, em que cada bit definido no bitset tem um caractere correspondente de 1 e um caractere de 0 se o bit não estiver definido.

Exemplo

// bitset_to_string.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>
#include <string>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );

   cout << "The ordered set of bits in the bitset<5> b1( 7 )"
        << "\n  that was generated by the number 7 is: ( "
        << b1 << " )" << endl;

   string s1;
   s1 =  b1.template to_string<char,
   char_traits<char>, allocator<char> >( );
   cout << "The string returned from the bitset b1"
        << "\n  by the member function to_string( ) is: "
        << s1 << "." << endl;
}
The ordered set of bits in the bitset<5> b1( 7 )
  that was generated by the number 7 is: ( 00111 )
The string returned from the bitset b1
  by the member function to_string( ) is: 00111.

to_ullong

Retorna um valor unsigned long long que contém os mesmos bits definidos como o conteúdo do objeto bitset.

unsigned long long to_ullong() const;

Valor retornado

Retorna a soma dos valores de bit presentes na sequência de bits como um unsigned long long. Esse valor unsigned long long recriaria os mesmos bits definidos se fosse usado para inicializar um bitset.

Exceções

Lançará um objeto overflow_error se qualquer bit na sequência de bits tiver um valor de bit que não possa ser representado como um valor do tipo unsigned long long.

Comentários

Retorna a soma dos valores de bit presentes na sequência de bits como um unsigned long long.

to_ulong

Converte um objeto bitset no inteiro que geraria a sequência de bits contidos se fosse usado para inicializar o bitset.

unsigned long to_ulong( ) const;

Valor retornado

Um inteiro que geraria os bits em um bitset se usado na inicialização do bitset.

Comentários

A aplicação da função membro retornaria o inteiro que tem a mesma sequência de 1 e 0 dígitos que é encontrada na sequência de bits contida no bitset.

A função membro lançará um objeto overflow_error se qualquer bit na sequência de bits tiver um valor de bit que não possa ser representado como um valor do tipo unsigned long.

Exemplo

// bitset_to_ulong.cpp
// compile with: /EHsc
#include <bitset>
#include <iostream>

int main( )
{
   using namespace std;

   bitset<5> b1 ( 7 );

   cout << "The ordered set of bits in the bitset<5> b1( 7 )"
        << "\n  that was generated by the number 7 is: ( "
        << b1 << " )" << endl;

   unsigned long int i;
   i = b1.to_ulong( );
   cout << "The integer returned from the bitset b1,"
        << "\n  by the member function to_long( ), that"
        << "\n  generated the bits as a base two number is: "
        << i << "." << endl;
}
The ordered set of bits in the bitset<5> b1( 7 )
  that was generated by the number 7 is: ( 00111 )
The integer returned from the bitset b1,
  by the member function to_long( ), that
  generated the bits as a base two number is: 7.