Třída bitset
Popisuje typ objektu, který ukládá posloupnost skládající se z pevného počtu bitů, které poskytují kompaktní způsob uchovávání příznaků pro sadu položek nebo podmínek. Třída bitset
podporuje operace s objekty typu bitset, které obsahují kolekci bitů a poskytují konstantní přístup k jednotlivým bitům.
Syntaxe
template <size_t N>
class bitset
Parametry
N
Určuje počet bitů v objektu bitset
s nenulovým celé číslo typu size_t
, které musí být známo v době kompilace.
Poznámky
Na rozdíl od podobné vector<bool>
třídybitset
třída nemá iterátory a není kontejnerem standardní knihovny C++. Liší se také od vector<bool>
určité konkrétní velikosti, která je pevná v době kompilace v souladu s velikostí určenou parametrem N
šablony při bitset<N>
deklaraci.
Bit se nastaví, pokud je jeho hodnota 1 a resetuje se, pokud je její hodnota 0. Chcete-li překlopit nebo invertovat bit, je změnit jeho hodnotu z 1 na 0 nebo od 0 do 1. Bity N
v objektu bitset
jsou indexovány celočíselnou hodnotou od 0 do N
- 1, kde 0 indexuje pozici prvního bitu a N
- 1 poslední bitovou pozici.
Členové
Konstruktory
Název | Popis |
---|---|
bitset |
Vytvoří objekt třídy bitset<N> a inicializuje bity na nulu, na určitou hodnotu nebo na hodnoty získané z znaků v řetězci. |
Typedefs
Název | Popis |
---|---|
element_type |
Typ, který je synonymem pro datový typ bool a lze jej použít k odkazování na bity prvků v objektu bitset . |
Funkce
Název | Popis |
---|---|
all |
Otestuje všechny bity v tomto bitset případě a určí, jestli jsou všechny nastavené na true . |
any |
Členová funkce testuje, zda je libovolný bit v sekvenci nastaven na hodnotu 1. |
count |
Členová funkce vrátí počet bitů nastavených v bitové sekvenci. |
flip |
Invertuje hodnotu všech bitů v bitset zadané pozici nebo invertuje jeden bit. |
none |
Testuje, zda nebyl v objektu bitset nastaven žádný bit na hodnotu 1. |
reset |
Obnoví všechny bity v bitset 0 nebo obnoví bit v zadané pozici na 0. |
set |
Nastaví všechny bity v bitset 1 nebo nastaví bit na zadanou pozici na 1. |
size |
Vrátí počet bitů v objektu bitset . |
test |
Testuje, zda je bit na zadané pozici v bitset bodě nastaven na hodnotu 1. |
to_string |
bitset Převede objekt na řetězcovou reprezentaci. |
to_ullong |
Vrátí součet bitových hodnot v bitové hodnotě bitset unsigned long long jako . |
to_ulong |
bitset Převede objekt na unsigned long ten, který by vygeneroval sekvenci bitů obsažených, pokud se používá k inicializaci bitset . |
Třídy
Název | Popis |
---|---|
reference |
Proxy třída, která poskytuje odkazy na bity obsažené v objektu bitset , který slouží k přístupu k jednotlivým bitům a manipulaci s nimi jako pomocné třídy třídy operator[] bitset . |
Operátory
Název | Popis |
---|---|
operator!= |
Testuje cíl bitset nerovnosti se zadaným bitset parametrem . |
operator&= |
Používá bitovou kombinaci bitových sad s bitové operace "and" (& ). |
operator<< |
Posune bity doleva bitset zadaný počet pozic a vrátí výsledek na nový bitset . |
operator<<= |
Posune bity doleva bitset zadaný počet pozic a vrátí výsledek cílovému bitset . |
operator== |
Testuje cíl bitset rovnosti se zadaným bitset parametrem . |
operator>> |
Posune bity na bitset pravé straně zadaný počet pozic a vrátí výsledek na nový bitset . |
operator>>= |
Posune bity v bitset rohu doprava zadaný počet pozic a vrátí výsledek na cíl bitset . |
operator[] |
Vrátí odkaz na bit na zadané pozici v bitset případě, že bitset je upravitelný. V opačném případě vrátí hodnotu bitu v dané pozici. |
operator^= | Používá bitovou kombinaci bitových sad s bitové operace "xor" (^ ). |
operator|= |
Používá bitovou kombinaci bitových sad s bitovou operací "or" (| neboli). |
operator~ |
Invertuje všechny bity v cíli bitset a vrátí výsledek. |
Struktury
Název | Popis |
---|---|
hash |
all
Otestuje všechny bity v této bitové sadě a určí, jestli jsou všechny nastavené na true.
bool all() const;
Návratová hodnota
Vrátí true
, pokud jsou všechny bity v této sadě pravdivé. Vrátí false
hodnotu, pokud je jeden nebo více bitů false.
any
Testuje, zda je libovolný bit v sekvenci nastaven na hodnotu 1.
bool any() const;
Návratová hodnota
true
pokud je v tomto bitset
bitu nastavená hodnota 1, false
pokud jsou všechny bity 0.
Příklad
// 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
Vytvoří objekt třídy bitset<N>
a inicializuje bity na nulu nebo na určitou zadanou hodnotu nebo na hodnoty získané z znaků v řetězci.
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'));
Parametry
val
Celé číslo bez znaménka, jehož základní dvě reprezentace se používá k inicializaci bitů ve vytvořeném objektu bitset
.
str
Řetězec nul a těch použitých k inicializaci bitových bitset
hodnot.
pos
Pozice znaku v řetězci, počítá se zleva doprava a začíná nulou, která slouží k inicializaci prvního bitu v objektu bitset
.
count
Početznakůch bitset
Zero
Znak, který se používá k reprezentaci nuly. Výchozí hodnota je 0.
One
Znak, který se používá k reprezentaci jednoho. Výchozí hodnota je 1.
Poznámky
1)
Vytvoří objekt třídy bitset<N>
a inicializuje všechny N bity na výchozí hodnotu nuly.
2-3)
Vytvoří objekt třídy bitset<N>
a inicializuje bity z parametru val
.
4)
Vytvoří objekt třídy bitset<N>
a inicializuje bity ze znaků zadaných v řetězci nuly a jedničky. Pokud jsou některé znaky řetězce jiné než 0 nebo 1, konstruktor vyvolá objekt třídy invalid argument
. Pokud zadaná pozice (pos
) přesahuje délku řetězce, pak konstruktor vyvolá objekt třídy out_of_range
. Konstruktor nastaví pouze ty bity na pozici j , bitset
pro které je znak v řetězci na pozici pos + j
1. Ve výchozím nastavení pos
je 0.
5)
Podobá se 4)
ale i dalšímu parametru, count
který určuje počet bitů, které se mají inicializovat. Má dva volitelné parametry, _Zero
které _One
označují, v str
jakém znaku by se měl interpretovat, aby znamenal 0 bit a 1 bit.
6)
Vytvoří objekt třídy bitset<N>
, inicializace N bitů na hodnoty, které odpovídají znakům zadaným v řetězci znaků ve stylu jazyka C nuly a jedničky. Konstruktor zavoláte bez přetypování řetězce na typ řetězce, například: bitset<5> b5("01011");
Příklad
// 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
Vrátí početbitch
size_t count() const;
Návratová hodnota
Počet bitů nastavených v bitové sekvenci
Příklad
// 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
Typ, který je synonymem pro datový typ bool
a lze jej použít k odkazování na bity prvků v objektu bitset
.
typedef bool element_type;
Příklad
// 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
Invertuje hodnotu všech bitů v bitset
zadané pozici nebo invertuje jeden bit.
bitset<N>& flip();
bitset<N>& flip(size_t pos);
Parametry
pos
Pozice bitu, jehož hodnota má být invertována.
Návratová hodnota
Kopie změněné bitset
funkce, pro kterou byla vyvolána členová funkce.
Poznámky
Druhá členová funkce vyvolá out_of_range
výjimku, pokud je pozice zadaná jako parametr větší než velikost N
bitu bitset<N>
, jehož bit byl invertován.
Příklad
// 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>>;
Žádná
Testuje, zda nebyl v objektu bitset
nastaven žádný bit na hodnotu 1.
bool none() const;
Návratová hodnota
true
pokud nebyl v bitu bitset
nastaven na hodnotu 1; false
pokud byl alespoň jeden bit nastaven na hodnotu 1.
Příklad
// 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!=
Otestuje cílovou bitovou sadu pro nerovnost se zadanou bitovou sadou.
bool operator!=(const bitset<N>& right) const;
Parametry
right
To bitset
je porovnat s cílovou bitovou sadou pro nerovnost.
Návratová hodnota
true
jsou-li bitové sady odlišné; false
pokud jsou stejné.
Poznámky
Bitsety musí mít stejnou velikost.
Příklad
// 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&=
Používá bitovou kombinaci bitových sad s bitové operace "and" (&
).
bitset<N>& operator&=(const bitset<N>& right);
Parametry
right
To bitset
je bitové spojení s cílovou bitovou sadou.
Návratová hodnota
Upravená cílová bitová sada, která je výsledkem bitové operace "and" (&
) se bitset
zadaným parametrem.
Poznámky
Dva bity kombinované operátorem AND
vrátí true
, pokud je každý bit pravdivý; jinak jejich kombinace vrátí false
.
Dvě sady bitů musí mít stejnou velikost.
Příklad
// 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<<
Posune bity doleva bitset
zadaný počet pozic a vrátí výsledek na nový bitset
.
bitset<N> operator<<(size_t pos) const;
Parametry
pos
Počet pozic vlevo, které mají být bity v tabulce bitset
posunuty.
Návratová hodnota
Upravená bitová sada s bity posunutými vlevo požadovaný počet pozic.
Poznámky
Funkce operátoru člena vrátí bitset(*this) <<= pos
, kde <<=
posune bity doleva bitset
zadaný počet pozic a vrátí výsledek cílovému bitset
.
Příklad
// 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<<=
Posune bity doleva bitset
zadaný počet pozic a vrátí výsledek cílovému bitset
.
bitset<N>& operator<<=(size_t pos);
Parametry
pos
Počet pozic vlevo od bitů, které mají být posunuty bitset
.
Návratová hodnota
Cílená bitset
změna tak, aby bity byly posunuty vlevo požadovaný počet pozic.
Poznámky
Pokud neexistuje žádný prvek pro posun do pozice, funkce vymaže bit na hodnotu 0.
Příklad
// 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==
Otestuje cílovou bitovou sadu pro rovnost se zadanou bitovou sadou.
bool operator==(const bitset<N>& right) const;
Parametry
right
To bitset
se má porovnat s cílovou bitovou sadou pro rovnost.
Návratová hodnota
true
pokud jsou bitsety stejné; false
pokud jsou jiné.
Poznámky
Bitsety musí mít stejnou velikost.
Příklad
// 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>>
Posune bity na bitset
pravé straně zadaný počet pozic a vrátí výsledek na novou bitovou sadu.
bitset<N> operator>>(size_t pos) const;
Parametry
pos
Počet pozic napravo, které mají být bity v tabulce bitset
posunuty.
Návratová hodnota
Nová bitová sada, ve které byly bity posunuty doprava požadovaný počet pozic vzhledem k cíli bitset
.
Příklad
// 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>>=
Posune bity v bitset
rohu doprava zadaný počet pozic a vrátí výsledek na cíl bitset
.
bitset<N>& operator>>=(size_t pos);
Parametry
pos
Počet pozic napravo, které mají být bity v tabulce bitset
posunuty.
Návratová hodnota
Cílená bitset
změna tak, aby byly bity posunuty doprava požadovaný počet pozic.
Poznámky
Pokud neexistuje žádný prvek pro posun do pozice, funkce vymaže bit na hodnotu 0.
Příklad
// 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[]
Vrátí odkaz na bit na zadané pozici v bitset
případě, že bitset
je upravitelný. V opačném případě vrátí hodnotu bitu v dané pozici.
bool operator[](size_t pos) const;
reference operator[](size_t pos);
Parametry
pos
Umístění umístění bitu uvnitř objektu bitset
.
Poznámky
Když v sestavení definujete _ITERATOR_DEBUG_LEVEL
hodnotu 1 nebo 2, dojde ve spustitelném souboru k chybě za běhu, pokud se pokusíte získat přístup k prvku mimo hranice objektu bitset
. Další informace naleznete v tématu Kontrola iterátorů.
Příklad
// 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^=
Používá bitovou kombinaci bitových sad s bitové operace "xor" (^
).
bitset<N>& operator^=(const bitset<N>& right);
Parametry
right
To bitset
je bitové spojení s cílovou bitovou sadou.
Návratová hodnota
Upravená cílová bitová sada, která je výsledkem bitové operace "xor" (^
) se bitset
zadaným parametrem.
Poznámky
Dva bity kombinované operátorem "xor" (^
) vrátí true
, pokud alespoň jeden, ale ne oba bity jsou true
; jinak jejich kombinace vrátí false
.
Bitsety musí mít stejnou velikost.
Příklad
// 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|=
Kombinuje dvě bitové sady pomocí bitové operace "or" (|
).
bitset<N>& operator|=(const bitset<N>& right);
Parametry
right
To bitset
je zkombinovat bitové s cílem bitset
.
Návratová hodnota
Upravená cílová bitová sada, která je výsledkem bitové operace "or" (|
) se bitset
zadaným parametrem.
Poznámky
Dvě bity kombinované operátorem inkluzivního OR
operátoru vrátí true
, pokud je true
alespoň jeden z bitů ; pokud jsou false
oba bity , jejich kombinace vrátí false
.
Bitsety musí mít stejnou velikost.
Příklad
// 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~
Invertuje všechny bity v cílové bitové sadě a vrátí výsledek.
bitset<N> operator~() const;
Návratová hodnota
S bitset
veškerými jeho bity invertovány s ohledem na cíle bitset
.
Příklad
// 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
Proxy třída, která poskytuje odkazy na bity obsažené v objektu bitset
, který slouží k přístupu k jednotlivým bitům a manipulaci s nimi jako pomocné třídy třídy operator[]
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();
};
Parametry
val
Hodnota objektu typu bool
, který má být přiřazen k bitu v objektu bitset
.
bitref
Odkaz formuláře x [ i ]
na bit na pozici i
v bitset
x
.
Návratová hodnota
Odkaz na bit v bitset
zadané pozici argumentu pro první, druhý a pátý člen funkce odkazu na třídu a true
nebo false
, aby odrážel hodnotu upraveného bitu v bitset
pro třetí a čtvrté členské funkce odkazu třídy.
Poznámky
Třída reference
existuje pouze jako pomocná třída pro bitset
operator[]
třídu . Člen třída popisuje objekt, který má přístup k jednotlivým bitům v rámci .bitset
Let b
být objekt typu bool
, x
a y
objekty typu bitset<N>
a a i
j
platné pozice v rámci tohoto objektu. Zápis x [i]
odkazuje na bit na pozici i
v bitsetu x
. Členské funkce třídy reference
poskytují v pořadí následující operace:
Operace | Definice |
---|---|
x [i ] = b |
Ukládá bool hodnotu b na pozici i bitu v bitset x . |
x [i ] = y [j ] |
Ukládá hodnotu bitu y [ j ] na pozici i bitu v bitset x . |
b = ~ x [i ] |
Ukládá překlopenou hodnotu bitu x [ i ] v bool b . |
b = x [i ] |
Ukládá hodnotu bitu x [ i ] v bool b . |
x [i ]. flip ( ) |
Ukládá překlopenou hodnotu bitu x [ i ] zpět na pozici i bitu v x . |
Příklad
// 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
Obnoví všechny bity v bitset
0 nebo obnoví bit v zadané pozici na 0.
bitset<N>& reset();
bitset<N>& reset(size_t pos);
Parametry
pos
Pozice bitu bitset
, který se má obnovit na 0.
Návratová hodnota
Kopie bitset
členské funkce, pro kterou byla vyvolána.
Poznámky
Druhá členová funkce vyvolá out_of_range
výjimku, pokud je zadaná pozice větší než velikost bitset
.
Příklad
// 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
Nastaví všechny bity v bitset
1 nebo nastaví bit na zadanou pozici na 1.
bitset<N>& set();
bitset<N>& set(
size_t pos,
bool val = true);
Parametry
pos
Pozice bitu v bitset
přiřazené hodnotě.
val
Hodnota, která se má přiřadit k bitu na zadané pozici.
Návratová hodnota
Kopie bitset
členské funkce, pro kterou byla vyvolána.
Poznámky
Druhá členová funkce vyvolá out_of_range
výjimku, pokud je zadaná pozice větší než velikost bitset
.
Příklad
// 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
Vrátí počet bitů v objektu bitset
.
size_t size() const;
Návratová hodnota
Počet bitů, N
v .bitset<N>
Příklad
// 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
Testuje, zda je bit na zadané pozici v bitset
bodě nastaven na hodnotu 1.
bool test(size_t pos) const;
Parametry
pos
Pozice bitu v testované hodnotě bitset
.
Návratová hodnota
true
pokud je bit určený pozicí argumentu nastaven na hodnotu 1; v opačném případě . false
Poznámky
Členová funkce vyvolá výjimku out_of_range
to_string
bitset
Převede objekt na řetězcovou reprezentaci.
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;
Vrácená hodnota
Řetězcový objekt třídy basic_string
, kde každý bit nastaven v bitset
sadě má odpovídající znak 1 a znak 0, pokud bit není nastaven.
Příklad
// 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
unsigned long long
Vrátí hodnotu, která obsahuje stejné bity nastavené jako obsah objektubitset
.
unsigned long long to_ullong() const;
Vrácená hodnota
Vrátí součet bitových hodnot, které jsou v bitové sekvenci jako unsigned long long
. Tato unsigned long long
hodnota by znovu vytvořila stejné bity sady, pokud se používá k inicializaci bitset
.
Výjimky
Vyvolá objekt, overflow_error
pokud jakýkoli bit v bitové sekvenci má bitovou hodnotu, která nemůže být reprezentována jako hodnota typu unsigned long long
.
Poznámky
Vrátí součet bitových hodnot, které jsou v bitové sekvenci jako unsigned long long
.
to_ulong
bitset
Převede objekt na celé číslo, které by vygenerovalo sekvenci bitů obsažených v případě použití k inicializaci bitset
.
unsigned long to_ulong( ) const;
Vrácená hodnota
Celé číslo, které by vygenerovalo bity v bitset
případě použití při inicializaci bitset
.
Poznámky
Použití členské funkce vrátí celé číslo, které má stejnou sekvenci 1 a 0 číslic, jak je nalezeno v sekvenci bitů obsažených v bitset
souboru .
Členské funkce vyvolá objekt, overflow_error
pokud jakýkoli bit v bitové sekvenci má bitovou hodnotu, která nemůže být reprezentována jako hodnota typu unsigned long
.
Příklad
// 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.