C++-bittijoukko ja sen sovellus

Bittijoukko on joukko booleja, mutta kutakin loogista arvoa ei tallenneta sen sijaan erilliseen tavuun, vaan bittijoukko optimoi tilan siten, että jokainen boolen arvo vie vain 1-bittistä tilaa , niin bittijoukon tilaama tila on pienempi kuin bool-taulukon tai bool-vektorin tila .

Bittijoukon rajoitus on se koon tulee olla tiedossa käännöshetkellä, eli bittijoukon koko on kiinteä.

std::bitset on sisällä määritetyn bittijoukon luokkamalli otsikkotiedosto joten meidän on sisällytettävä otsikkotiedosto ennen kuin käytämme bitsetiä ohjelmassamme.

Syntaksi:

bitset variable_name(initialization); 

Voimme alustaa bittijoukon kolmella tavalla:

1. Alustamaton: Kaikki bitit asetetaan nollaan.

bitset variable_name; 

2. Alustus desimaalikokonaisluvulla: Bitset edustaa annettua desimaalilukua binäärimuodossa.

bitset variable_name(DECIMAL_NUMBER); 

3. Alustus binäärimerkkijonolla: Bitset edustaa annettua binäärimerkkijonoa.

bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING'); 

Esimerkki:

C++
// C++ program to demonstrate the bitset  #include  #include  using namespace std; int main() {  // declaring an uninitialized bitset object  bitset <8>alustamatonBitset;  // alustus desimaalilukubittijoukolla <8>desimaalibitti(15);  // alustus binäärimerkkijonobittijoukolla <8>stringBitset(merkkijono('1111'));  cout < < 'Uninitialized bitset: '  < < uninitializedBitset   < < endl;  cout  < < 'Initialized with decimal: '  < < decimalBitset   < < endl;  cout  < < 'Initialized with string: '  < < stringBitset   < < endl;  return 0; } 

Lähtö
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111 

std::bitset Jäsenfunktiot

std::bitset-luokka sisältää hyödyllisiä jäsenfunktioita bitset-objektien käsittelyä varten. Tässä on luettelo joistakin std::bitsetin jäsenfunktioista:

Toiminnon nimi

Toiminnon kuvaus

aseta()

Aseta bitin arvo annetulla indeksillä kohtaan 1 .

reset()

Aseta bitin arvo tietyllä indeksillä 0:ksi .

voltti()

Käännä bitin arvo annetulla indeksillä.

Kreivi()

Kreivi lukumäärä asettaa bittejä .

testata()

Palauttaa boolen arvo annetulla indeksillä .

minkä tahansa()

Tarkistaa jos minkä tahansa bitti on aseta .

ei mitään()

Tarkistaa jos ei mitään bitti on aseta.

kaikki()

Tarkista jos kaikki bitti on aseta.

koko()

Palauttaa bittijoukon koko.

to_string()

Muuntaa bittisarjaksi std::string.

seurata()

Muuntaa bitsetistä unsigned long.

to_ullong()

Muuntaa bitsetistä unsigned long long.

Esimerkki:

C++
// C++ program to demonstrate the // use of std::bitset member // functions #include  #include  using namespace std; int main() {  // declaring index variable  int index = 0;  // declaring few bitset objects  bitset <4>allSet('1111'), allUnset;  cout < < 'any() value: '  < < boolalpha  < < allSet.any()   < < endl;  cout  < < 'all() value: '  < < allSet.all()  < < endl;  cout  < < 'none() value: '  < < allSet.none()  < < endl;  cout  < < 'test() at index 0: '  < < noboolalpha   < < allSet.test(index)  < < endl;  cout  < < 'size() value: '  < < allSet.size()  < < endl;  cout  < < 'Value of allUnset on before using set(): '   < < allUnset  < < endl;  allUnset.set(index);  cout  < < 'Value of allUnset on after using set(): '   < < allUnset  < < endl;  cout  < < 'Value of allSet on before using reset(): '   < < allSet  < < endl;  allSet.reset(index);  cout  < < 'Value of allSet on after using reset(): '   < < allSet  < < endl;  // declaring an empty string  string bitString;  // using to_string() method to assign value to empty  // string  bitString = allSet.to_string();  cout  < < 'bitString: '  < < bitString  < < endl;  cout  < < 'Unsigned Long value: '  < < allSet.to_ulong();  return 0; } 

Lähtö
any() value: true all() value: true none() value: false test() at index 0: 1 size() value: 4 Value of allUnset on before using set(): 0000 Value of allUnset on after using set(): 0001 Value of allSet on before using reset(): 1111 Value of allSet on after using reset(): 1110 bitString: 1110 Unsigned Long value: 14 

Huomautus: boolalphaa käytetään tulostamaan tosi ja epätosi 1:n tai 0:n sijaan boolen arvoille ja noboolalphaa päinvastoin.

std::bitset Operaattorit

Jotkut perusoperaattorit ovat ylikuormitettuja työskentelemään bittijoukkoobjektien kanssa. Seuraavassa on luettelo näistä operaattoreista:

Operaattori

Operaatio

[]

Pääsy operaattori

&

Bitittain JA

|

Bitittain TAI

!

Bitittain VAPAA

>>=

Binääri Oikea vaihto ja määrätä

< <=

Binääri Vasen vaihtonäppäin ja määrätä

&=

Määritä arvo bittikohtaisesti JA ensimmäiseen bittijoukkoon.

|=

Määritä arvo bittikohtaisesti TAI ensimmäiseen bittijoukkoon.

^=

Määritä arvo bittikohtaisesti VAPAA ensimmäiseen bittijoukkoon.

~

Bitittain EI

Esimerkki:

C++
// C++ program to show the different operator functions on // bitset #include  #include  using namespace std; int main() = bitset2)   < < endl;  // bitwise NOT  cout  < < 'Bitwise NOT: '  < < (result = ~bitset1)  < < endl;  // bitwise XOR  bitset1 = 9;  cout  < < 'Bitwise XOR: '  < < (bitset1 ^= bitset2)  < < endl;  bitset1 = 9;  cout  < < 'Binary leftshift on bitwise1: '   < < (bitset1  < <= 1)  < < endl;  bitset1 = 9;  cout  < < 'Binary rightshift on bitwise1: '   < < (bitset1>>= 1) < < endl;  return 0; 


Lähtö

Bitset1: 1001 Bitset2: 1010 Accessing bit value at index 1 of bitset1: 0 Bitwise AND using &: 1000 Bitwise AND using &=: 1000 Bitwise OR using |: 1011 Bitwise OR using |=: 1011 Bitwise NOT: 0100 Bitwise XOR: 0011 Binary leftshift on bitwise1: 0010 Binary rightshift on bitwise1: 0100 

Ero std::bitsetin ja std::vektorin ja bool-taulukon välillä

Bool-vektori ja bool-joukko voidaan myös toteuttaa loogisten arvojen, kuten bittijoukon, tallentamiseen, mutta kunkin toteutuksen välillä on joitain eroja:

Parametri

bittisarja

bool-vektori

joukko bool

Määritelmä Luokkamalli, joka koostuu bittisarjasta, joka on tallennettu siten, että jokainen bitti vie 1 bitin muistia. Muunnelma C++ STL:n vektoreista, jossa jokainen elementti on kooltaan 1 bitti ja bool-tyyppiä Kiinteän kokoinen jatkuva kokoelma bool-tietoelementtejä.
Koko Kiinteä koko. Dynaaminen koko. Kiinteä koko.
Muisti Yksi elementti vie 1 bitin muistia. Yksi elementti vie 1 bitin muistia. Yksi elementti vie 1 tavun muistia.
Nopeus Sama Sama Nopeammin