Classe bitset
Descrive un tipo di oggetto che archivia una sequenza formata da un numero fisso di bit che forniscono un modo compatto di mantenere i flag per un set di elementi o condizioni. La bitset
classe supporta operazioni su oggetti di tipo bitset che contengono una raccolta di bit e forniscono l'accesso in tempo costante a ogni bit.
Sintassi
template <size_t N>
class bitset
Parametri
N
Specifica il numero di bit nell'oggetto bitset
con un numero intero diverso da zero di tipo size_t
che deve essere noto in fase di compilazione.
Osservazioni:
A differenza della classe similevector<bool>
, la bitset
classe non ha iteratori e non è un contenitore della libreria standard C++. Differisce anche dal vector<bool>
fatto di essere di alcune dimensioni specifiche fisse in fase di compilazione in base alle dimensioni specificate dal parametro N
di modello quando bitset<N>
viene dichiarato .
Un bit viene impostato se il valore è 1 e reimpostato se il valore è 0. Capovolgere o invertire un bit significa modificarne il valore da 1 a 0 o da 0 a 1. I N
bit in un bitset
vengono indicizzati per valori interi da 0 a N
- 1, dove 0 indicizza la prima posizione del bit e N
- 1 la posizione finale del bit.
Membri
Costruttori
Nome | Descrizione |
---|---|
bitset |
Costruisce un oggetto di classe bitset<N> e inizializza i bit a zero, a un valore specificato o a valori ottenuti dai caratteri in una stringa. |
Typedef
Nome | Descrizione |
---|---|
element_type |
Tipo sinonimo del tipo di dati bool che può essere usato per fare riferimento ai bit dell'elemento in bitset . |
Funzioni
Nome | Descrizione |
---|---|
all |
Verifica tutti i bit in questo bitset modo per determinare se sono tutti impostati su true . |
any |
La funzione membro verifica se nella sequenza sono inclusi bit impostati su 1. |
count |
La funzione membro restituisce il numero di bit impostati nella sequenza di bit. |
flip |
Inverte il valore di tutti i bit in bitset o un singolo bit in una posizione specificata. |
none |
Verifica che nessun bit sia stato impostato su 1 in un oggetto bitset . |
reset |
Reimposta tutti i bit in bitset su 0 o un bit in una posizione specificata su 0. |
set |
Imposta tutti i bit in bitset su 1 o un bit in una posizione specificata su 1. |
size |
Restituisce il numero di bit in un oggetto bitset . |
test |
Verifica se il bit in una posizione specificata in bitset è impostato su 1. |
to_string |
Converte un oggetto bitset in una rappresentazione di stringa. |
to_ullong |
Restituisce la somma dei valori di bit in bitset come unsigned long long . |
to_ulong |
Converte un oggetto bitset in unsigned long che genera la sequenza dei bit contenuti se usati per inizializzare bitset . |
Classi
Nome | Descrizione |
---|---|
reference |
Classe proxy che fornisce i riferimenti ai bit contenuti in un bitset usata per accedere e modificare i singoli bit come classe helper per operator[] della classe bitset . |
Operatori
Nome | Descrizione |
---|---|
operator!= |
Verifica un bitset di destinazione per la disuguaglianza con un bitset specificato. |
operator&= |
Esegue una combinazione bit per bit di bitset con l'operazione bit per bit "and" (& ). |
operator<< |
Sposta i bit in un bitset a sinistra di un numero di posizioni specificato e restituisce il risultato in un nuovo bitset . |
operator<<= |
Sposta i bit in un bitset a sinistra di un numero di posizioni specificato e restituisce il risultato nel bitset di destinazione. |
operator== |
Verifica un bitset di destinazione per l'uguaglianza con un bitset specificato. |
operator>> |
Sposta i bit in un bitset a destra di un numero di posizioni specificato e restituisce il risultato in un nuovo bitset . |
operator>>= |
Sposta i bit in un bitset a destra di un numero di posizioni specificato e restituisce il risultato nel bitset di destinazione. |
operator[] |
Restituisce un riferimento a un bit in una posizione specificata in un bitset se il bitset è modificabile. In caso contrario, restituisce il valore del bit in tale posizione. |
operator^= | Esegue una combinazione bit per bit di bitset con l'operazione "xor" bit per bit (^ ). |
operator|= |
Esegue una combinazione bit per bit di bitset con l'operazione bit per bit "o" (| ). |
operator~ |
Inverte tutti i bit in un bitset di destinazione e restituisce il risultato. |
Strutture
Nome | Descrizione |
---|---|
hash |
all
Verifica tutti i bit in questo bitset per determinare se sono tutti impostati su true.
bool all() const;
Valore restituito
Restituisce true
se tutti i bit in questo set sono true. Restituisce false
se uno o più bit sono false.
any
Verifica se nella sequenza sono inclusi bit impostati su 1.
bool any() const;
Valore restituito
true
se qualsiasi bit in questo bitset
oggetto è impostato su 1; false
se tutti i bit sono 0.
Esempio
// 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
Costruisce un oggetto di classe bitset<N>
e inizializza i bit su zero, su un valore specificato o su valori ottenuti dai caratteri in una stringa.
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'));
Parametri
val
Intero senza segno la cui rappresentazione di base due viene utilizzata per inizializzare i bit nell'oggetto bitset
costruito.
str
Stringa di zeri e valori usati per inizializzare i valori di bitset
bit.
pos
Posizione del carattere nella stringa, contando da sinistra a destra e a partire da zero, usata per inizializzare il primo bit in bitset
.
count
Numero di caratteri nella stringa utilizzata per fornire valori iniziali per i bit nell'oggetto bitset
.
Zero
Il carattere usato per rappresentare uno zero. Il valore predefinito è "0".
One
Il carattere usato per rappresentare un uno. Il valore predefinito è "1".
Osservazioni:
1)
Costruisce un oggetto della classe bitset<N>
e inizializza tutti i bit N in un valore predefinito pari a zero.
2-3)
Costruisce un oggetto della classe bitset<N>
e inizializza i bit dal val
parametro .
4)
Costruisce un oggetto della classe bitset<N>
e inizializza i bit dai caratteri forniti in una stringa di zeri e uno. Se uno dei caratteri della stringa è diverso da 0 o 1, il costruttore genera un oggetto della classe invalid argument
. Se la posizione specificata (pos
) supera la lunghezza della stringa, il costruttore genera un oggetto della classe out_of_range
. Il costruttore imposta solo i bit in corrispondenza della bitset
posizione j in per cui il carattere nella stringa in corrispondenza della posizione pos + j
è 1. Il valore predefinito di pos
è 0.
5)
Analogamente a 4)
ma include un altro parametro, count
, che specifica il numero di bit da inizializzare. Ha due parametri facoltativi, _Zero
e _One
, che indicano il carattere in str
deve essere interpretato rispettivamente per indicare un bit 0 e un bit 1.
6)
Costruisce un oggetto della classe bitset<N>
, inizializzando i bit N ai valori che corrispondono ai caratteri forniti in una stringa di caratteri in stile C di zeri e uno. Chiamare il costruttore senza eseguire il cast della stringa in un tipo stringa, ad esempio: bitset<5> b5("01011");
Esempio
// 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
Restituisce il numero di bit impostati nella sequenza di bit.
size_t count() const;
Valore restituito
Numero di bit impostati nella sequenza di bit.
Esempio
// 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
Tipo sinonimo del tipo di dati bool
che può essere usato per fare riferimento ai bit dell'elemento in bitset
.
typedef bool element_type;
Esempio
// 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 il valore di tutti i bit in bitset
o un singolo bit in una posizione specificata.
bitset<N>& flip();
bitset<N>& flip(size_t pos);
Parametri
pos
La posizione del bit il cui valore viene invertito.
Valore restituito
Copia dell'oggetto modificato bitset
per il quale è stata richiamata la funzione membro.
Osservazioni:
La seconda funzione membro genera un'eccezione out_of_range
se la posizione specificata come parametro è maggiore della dimensione N
del bitset<N>
bit invertito.
Esempio
// 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>>;
Nessuno
Verifica che nessun bit sia stato impostato su 1 in un oggetto bitset
.
bool none() const;
Valore restituito
true
se nessun bit in bitset
è stato impostato su 1; false
se almeno un bit è stato impostato su 1.
Esempio
// 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!=
Verifica un bitset di destinazione per la disuguaglianza con un bitset specificato.
bool operator!=(const bitset<N>& right) const;
Parametri
right
Oggetto bitset
da confrontare con il bitset di destinazione per la disuguaglianza.
Valore restituito
true
se i bitset sono diversi; false
se sono uguali.
Osservazioni:
I bitset devono avere le stesse dimensioni.
Esempio
// 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&=
Esegue una combinazione bit per bit di bitset con l'operazione bit per bit "and" (&
).
bitset<N>& operator&=(const bitset<N>& right);
Parametri
right
Oggetto bitset
da combinare bit per bit con il bitset di destinazione.
Valore restituito
Bitset di destinazione modificato risultante dall'operazione bit per bit "and" (&
) con l'oggetto bitset
specificato come parametro.
Osservazioni:
Due bit combinati dall'operatore AND
restituiscono true
se ogni bit è true; in caso contrario, la combinazione restituisce false
.
I due bitset devono avere le stesse dimensioni.
Esempio
// 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<<
Sposta i bit in un bitset
a sinistra di un numero di posizioni specificato e restituisce il risultato in un nuovo bitset
.
bitset<N> operator<<(size_t pos) const;
Parametri
pos
Numero di posizioni a sinistra che devono essere spostati i bit in bitset
.
Valore restituito
Il bitset modificato con i bit spostati a sinistra del numero di posizioni richiesto.
Osservazioni:
La funzione dell'operatore membro restituisce bitset(*this) <<= pos
dove <<=
sposta i bit in un bitset
oggetto a sinistra di un numero specificato di posizioni e restituisce il risultato all'oggetto di destinazione bitset
.
Esempio
// 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<<=
Sposta i bit in un bitset
a sinistra di un numero di posizioni specificato e restituisce il risultato nel bitset
di destinazione.
bitset<N>& operator<<=(size_t pos);
Parametri
pos
Il numero di posizioni a sinistra dei bit in bitset
deve essere spostato.
Valore restituito
Modifica di destinazione bitset
in modo che i bit siano stati spostati a sinistra del numero di posizioni richiesto.
Osservazioni:
Se non esiste un elemento da spostare nella posizione, la funzione cancella il bit impostandolo su 0.
Esempio
// 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==
Verifica un bitset di destinazione per l'uguaglianza con un bitset specificato.
bool operator==(const bitset<N>& right) const;
Parametri
right
Oggetto bitset
da confrontare con il bitset di destinazione per verificarne l'uguaglianza.
Valore restituito
true
se i bitset sono uguali; false
se sono diversi.
Osservazioni:
I bitset devono avere le stesse dimensioni.
Esempio
// 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>>
Sposta i bit in un bitset
oggetto a destra di un numero specificato di posizioni e restituisce il risultato a un nuovo bitset.
bitset<N> operator>>(size_t pos) const;
Parametri
pos
Il numero di posizioni a destra dei bit in bitset
deve essere spostato.
Valore restituito
Nuovo bitset in cui i bit sono stati spostati a destra il numero di posizioni richiesto rispetto all'oggetto di destinazione bitset
.
Esempio
// 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>>=
Sposta i bit in un bitset
a destra di un numero di posizioni specificato e restituisce il risultato nel bitset
di destinazione.
bitset<N>& operator>>=(size_t pos);
Parametri
pos
Il numero di posizioni a destra dei bit in bitset
deve essere spostato.
Valore restituito
Modifica di destinazione bitset
in modo che i bit siano stati spostati a destra il numero di posizioni richiesto.
Osservazioni:
Se non esiste un elemento da spostare nella posizione, la funzione cancella il bit impostandolo su 0.
Esempio
// 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[]
Restituisce un riferimento a un bit in una posizione specificata in un bitset
se il bitset
è modificabile. In caso contrario, restituisce il valore del bit in tale posizione.
bool operator[](size_t pos) const;
reference operator[](size_t pos);
Parametri
pos
Posizione che individua il bit all'interno di bitset
.
Osservazioni:
Quando si definisce _ITERATOR_DEBUG_LEVEL
come 1 o 2 nella compilazione, si verificherà un errore di runtime nel file eseguibile se si tenta di accedere a un elemento al di fuori dei limiti di bitset
. Per altre informazioni, vedere Checked Iterators.
Esempio
// 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^=
Esegue una combinazione bit per bit di bitset con l'operazione "xor" bit per bit (^
).
bitset<N>& operator^=(const bitset<N>& right);
Parametri
right
Oggetto bitset
da combinare bit per bit con il bitset di destinazione.
Valore restituito
Bitset di destinazione modificato risultante dall'operazione "xor" bit per bit con^
l'oggetto bitset
specificato come parametro.
Osservazioni:
Due bit combinati dall'operatore "xor" bit per bit (^
) restituiscono true
se almeno uno, ma non entrambi, dei bit sono true
; in caso contrario, la combinazione restituisce false
.
I bitset devono avere le stesse dimensioni.
Esempio
// 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 due bitset usando l'operazione bit per bit "o" (|
).
bitset<N>& operator|=(const bitset<N>& right);
Parametri
right
Oggetto bitset
che deve essere combinato bit per bit con la destinazione bitset
.
Valore restituito
Bitset di destinazione modificato risultante dall'operazione bit per bit "o" (|
) con l'oggetto bitset
specificato come parametro.
Osservazioni:
Due bit combinati dall'operatore inclusivo OR
restituiscono true
se almeno uno dei bit è true
; se entrambi i bit sono false
, la combinazione restituisce false
.
I bitset devono avere le stesse dimensioni.
Esempio
// 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 tutti i bit in un bitset di destinazione e restituisce il risultato.
bitset<N> operator~() const;
Valore restituito
Oggetto bitset
con tutti i suoi bit invertiti rispetto all'oggetto di destinazione bitset
.
Esempio
// 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
Classe proxy che fornisce i riferimenti ai bit contenuti in un bitset
usata per accedere e modificare i singoli bit come classe helper per operator[]
della 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();
};
Parametri
val
Valore dell'oggetto di tipo bool
da assegnare a un bit in un oggetto bitset
.
bitref
Riferimento del form x [ i ]
al bit in corrispondenza della posizione i
in bitset
x
.
Valore restituito
Riferimento al bit nell'oggetto bitset
specificato dalla posizione dell'argomento per la prima, la seconda e la quinta funzione membro del riferimento di classe e true
o false
, per riflettere il valore del bit modificato in bitset
per la terza e quarta funzione membro del riferimento di classe.
Osservazioni:
La classe reference
esiste solo come classe helper per .bitset
operator[]
La classe membro descrive un oggetto che può accedere a un singolo bit all'interno di un oggetto bitset
. Si supponga di b
essere un oggetto di tipo e y
di oggetti di tipo bool
bitset<N>
x
e i
di j
posizioni valide all'interno di tale oggetto. La notazione x [i]
fa riferimento al bit in corrispondenza della posizione i
in bitset x
. Le funzioni membro della classe reference
specificano, in ordine, le operazioni seguenti:
Operazione | Definizione |
---|---|
x [i ] = b |
Archivia bool il valore b in corrispondenza della posizione i di bit in bitset x . |
x [i ] = y [j ] |
Archivia il valore del bit y [ j ] in posizione i di bit nel bitset x . |
b = ~ x [i ] |
Archivia il valore capovolto del bit x [ i ] in bool b . |
b = x [i ] |
Archivia il valore del bit x [ i ] in bool b . |
x [i ]. flip ( ) |
Archivia il valore capovolto del bit x [ i ] in corrispondenza della posizione i di bit in x . |
Esempio
// 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
Reimposta tutti i bit in bitset
su 0 o un bit in una posizione specificata su 0.
bitset<N>& reset();
bitset<N>& reset(size_t pos);
Parametri
pos
Posizione del bit in bitset
da reimpostare su 0.
Valore restituito
Copia dell'oggetto bitset
per il quale è stata richiamata la funzione membro.
Osservazioni:
La seconda funzione membro genera un'eccezione out_of_range
se la posizione specificata è maggiore delle dimensioni dell'oggetto bitset
.
Esempio
// 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
Imposta tutti i bit in bitset
su 1 o un bit in una posizione specificata su 1.
bitset<N>& set();
bitset<N>& set(
size_t pos,
bool val = true);
Parametri
pos
Posizione del bit in bitset
da impostare il valore assegnato.
val
Valore da assegnare al bit nella posizione specificata.
Valore restituito
Copia dell'oggetto bitset
per il quale è stata richiamata la funzione membro.
Osservazioni:
La seconda funzione membro genera un'eccezione out_of_range
se la posizione specificata è maggiore delle dimensioni dell'oggetto bitset
.
Esempio
// 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
Restituisce il numero di bit in un oggetto bitset
.
size_t size() const;
Valore restituito
Numero di bit, , N
in un oggetto bitset<N>
.
Esempio
// 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
Verifica se il bit in una posizione specificata in bitset
è impostato su 1.
bool test(size_t pos) const;
Parametri
pos
Posizione del bit in bitset
da testare per il relativo valore.
Valore restituito
true
se il bit specificato dalla posizione dell'argomento è impostato su 1; in caso contrario, false
.
Osservazioni:
La funzione membro genera un'eccezione out_of_range
to_string
Converte un oggetto bitset
in una rappresentazione di stringa.
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;
Valore restituito
Oggetto stringa della classe basic_string
, dove ogni bit impostato in bitset
ha un carattere corrispondente pari a 1 e un carattere pari a 0 se il bit non è impostato.
Esempio
// 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
Restituisce un unsigned long long
valore che contiene gli stessi bit impostati come contenuto dell'oggetto bitset
.
unsigned long long to_ullong() const;
Valore restituito
Restituisce la somma dei valori di bit presenti nella sequenza di bit come unsigned long long
. Questo unsigned long long
valore crea nuovamente gli stessi bit di set se viene usato per inizializzare un oggetto bitset
.
Eccezioni
Genera un overflow_error
oggetto se un bit nella sequenza di bit ha un valore di bit che non può essere rappresentato come valore di tipo unsigned long long
.
Osservazioni:
Restituisce la somma dei valori di bit presenti nella sequenza di bit come unsigned long long
.
to_ulong
Converte un bitset
oggetto nell'intero che genererebbe la sequenza di bit contenuti se utilizzata per inizializzare .bitset
unsigned long to_ulong( ) const;
Valore restituito
Intero che genera i bit in un bitset
oggetto se utilizzato nell'inizializzazione dell'oggetto bitset
.
Osservazioni:
L'applicazione della funzione membro restituirà l'intero con la stessa sequenza di 1 e 0 cifre trovate nella sequenza di bit contenuti in bitset
.
La funzione membro genera un overflow_error
oggetto se un bit nella sequenza di bit ha un valore di bit che non può essere rappresentato come valore di tipo unsigned long
.
Esempio
// 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.