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 |