Lyhyt kuvaus Bitwise-operaattoreista
Operaattori on symboli, joka kehottaa kääntäjää suorittamaan tiettyjä matemaattisia tai loogisia operaatioita. C ++ --järjestelmässä on useita operaattoreita, kuten:
- Aritmeettiset operaattorit
- Loogiset operaattorit
- Suhteelliset operaattorit
- Tehtäväoperaattorit
- Bit-operaattorit
- Muut operaattorit
Kaikki Bitwise-operaattorit toimivat yksittäisillä bittitasoilla. Bittikohtaista operaattoria voidaan käyttää vain kokonaisluku- ja merkkitietotyyppeihin. Esimerkiksi, jos sinulla on kokonaislukutyyppinen muuttuja, jonka koko on 32 bittiä, ja käytät bittiä EI-operaatiota, bittiä EI-operaattoria käytetään kaikkiin 32 bittiin. Joten lopulta kaikki muuttujan 32 bittiä käännetään.
C ++: ssa on kuusi erilaista bittikohtaista operaattoria:
- Bittikohtaisesti TAI [edustaa "|"]
- Bittikohtaisesti JA [edustettuina ”&”]
- Bittikohtaisesti EI [edustettu ”~”]
- Bittikohtaisesti XOR [edustettu nimellä ”^”]
- Bittisuuntainen vasen vaihto [edustettu "<<”]
- Oikea siirtymä bittiä kohti [edustettuina nimellä “>>”]
Bittitai TAI totuuden taulukko
Bitwise OR -operaattori tuottaa arvon 1, kun ainakin yksi operandi on asetettu arvoon 1. Tässä on totuustaulukko Bitwise OR -operaattorille:
Bitti-1 | Bit-2 | Bitti-1 | Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Bittitason ja totuuden taulukko
Bit-operaattori AND tuottaa 1, kun molemmat operandit on asetettu 1: een. Tässä on totuustaulukko Bitwise AND -operaattorille:
Bitti-1 | Bit-2 | Bit-1 ja Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Bittikohtaisesti EI totuustaulukko
Bit-operaattori EI-operaattori kääntää operandin. Tässä on totuustaulukko Bitwise NOT -operaattorille:
Bitti-1 | ~ Bit-1 |
---|---|
0 | 1 |
1 | 0 |
Bittikohtainen XOR-totuustaulukko
Bittikohtaisesti XOR-operaattori tuottaa 1, ja vain, jos jokin operandeista on asetettu 1: ksi. Tässä on totuustaulukko Bitwise AND -operaattorille:
Bitti-1 | Bit-2 | Bitti-1 ^ Bitti-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Vasemmanpuoleisen vaihdon kuljettaja
Bittisuuntainen vasen siirto -käyttäjä siirtää kaikki bitit, jotka on jätetty määritetyn määrän määritettyjä bittejä. Jos vasemmalle siirrät kaikki databitit yhdellä, alkuperäiset tiedot kerrotaan kahdella. Vastaavasti, jos vasemmalle siirrät kaikki databitit kahdella, alkuperäinen data kerrotaan 4: llä.
Oikeavaihteen kuljettaja bittikohtaisesti
Oikeasiirtonopeuden operaattori siirtää kaikki bitit oikealle määritetyllä määrällä määritettyjä bittejä. Jos siirrät kaikki databitit oikealle yhdellä, alkuperäiset tiedot jaetaan (kokonaislukujako) kahdella. Vastaavasti, jos siirrät kaikki databitit oikealle 2: lla, alkuperäiset tiedot jaetaan (kokonaislukujako) 4: llä.
Esimerkkejä
Nyt kun olemme ymmärtäneet bittikohtaisten operaatioiden peruskäsitteen, katsokaamme muutama esimerkki, jotka auttavat sinua ymmärtämään bittikohtaiset operaatiot C ++: ssa:
- Esimerkki 1: Bittikohtaisesti TAI operaattori
- Esimerkki 2: Bittiviiva ja operaattori
- Esimerkki 3: Bittikohtaisesti EI operaattoria
- Esimerkki 4: XOR-operaattori bittikohtaisesti
- Esimerkki 5: Vasemmanpuoleisen vaihdon operaattori bittiä kohti
- Esimerkki 6: Oikeansiirtonopeuden ohjain bittiä kohti
- Esimerkki 7: Aseta bitti
- Esimerkki 8: Tyhjennä bitti
Esimerkit 7 ja 8 on tarkoitettu osoittamaan bittioperaattoreiden todellista käyttöä C ++ - ohjelmointikielellä.
Esimerkki 1: Bittikohtaisesti TAI operaattori
Tässä esimerkkiohjelmassa esittelemme Bitwise OR -operaattoria.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_numero = 7, toinen_luku = 9, tulos = 0;
// Bittikohtainen TAI -toiminto
tulos = ensimmäinen_luku | toinen_num;
// tulosta syötetyt numerot
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
näyttö ("Toinen luku on =", toinen_luku);
// tulosta lähtöarvo
näyttö ("first_num | second_num =", tulos);
cout << endl;
paluu 0;
Esimerkki 2: Bittiviiva ja operaattori
Tässä esimerkkiohjelmassa kuvataan Bitwise AND -operaattoria.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_numero = 7, toinen_luku = 9, tulos = 0;
// Bittikohtainen JA-toiminta
tulos = ensimmäinen_numero & toinen_num;
// tulosta syötetyt numerot
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
splay ("Toinen luku on =", toinen_luku);
// tulosta lähtöarvo
näyttö ("first_num & second_num =", tulos);
cout << endl;
paluu 0;
Esimerkki 3: Bittikohtaisesti EI operaattoria
Tässä esimerkkiohjelmassa ymmärrämme kuinka Bitwise NOT -operaattori toimii C: ssä++.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_luku = 7, toinen_luku = 9, tulos_1 = 0, tulos_2 = 0;
// Bittikohtaisesti EI-toiminta
tulos_1 = ~ ensimmäinen_luku;
tulos_2 = ~ toinen_luku;
// tulosta syötetyt numerot ja lähtöarvo
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
näyttö ("~ first_num =", tulos_1);
cout << endl;
// tulosta syötetyt numerot ja lähtöarvo
näyttö ("Toinen luku on =", toinen_luku);
näyttö ("~ second_num =", tulos_2);
cout << endl;
paluu 0;
Esimerkki 4: XOR-operaattori bittikohtaisesti
Tämän ohjelman tarkoituksena on selittää, kuinka Bitwise XOR -operaattori toimii C: ssä++.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_numero = 7, toinen_luku = 9, tulos = 0;
// Bittikohtainen XOR-toiminto
tulos = ensimmäinen_num ^ toinen_num;
// tulosta syötetyt numerot
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
näyttö ("Toinen luku on =", toinen_luku);
// tulosta lähtöarvo
näyttö ("first_num ^ second_num =", tulos);
cout << endl;
paluu 0;
Esimerkki 5: Vasemmanpuoleisen vaihdon operaattori bittiä kohti
Nyt näemme esimerkin Bitwise Left Shift -operaattorista. Tässä ohjelmassa olemme ilmoittaneet kaksi kokonaislukutyyppistä numeroa, ensimmäinen_numero ja toinen_luku. Tällöin “first_num” on vasemmalla siirretty yhdellä bitillä ja “second_num” vasemmalla puolella kahdella bitillä.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_luku = 7, toinen_luku = 9, tulos_1 = 0, tulos_2 = 0;
// Vasemmanpuoleinen siirto bittiä kohti
tulos_1 = ensimmäinen_luku << 1;
tulos_2 = toinen_luku << 2;
// tulosta syötetyt numerot ja lähtöarvo
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
display ("ensimmäinen_num << 1 = ", result_1);
cout << endl;
// tulosta syötetyt numerot ja lähtöarvo
näyttö ("Toinen luku on =", toinen_luku);
näyttö ("second_num << 2 = ", result_2);
cout << endl;
paluu 0;
Esimerkki 6: Oikeansiirtonopeuden ohjain bittiä kohti
Näemme nyt toisen esimerkin ymmärtämään Bitwise Right Shift -operaattoria. Olemme ilmoittaneet kaksi kokonaislukutyyppistä numeroa, ensimmäinen_numero ja toinen_luku. Tällöin “first_num” on oikealle siirretty yhdellä bitillä ja ”second_num” on oikealle siirretty kahdella bitillä.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen_luku = 7, toinen_luku = 9, tulos_1 = 0, tulos_2 = 0;
// Oikeasiirtonopeus bittinopeudella
tulos_1 = ensimmäinen_luku >> 1;
tulos_2 = toinen_luku >> 2;
// tulosta syötetyt numerot ja lähtöarvo
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
näyttö ("first_num >> 1 =", tulos_1);
cout << endl;
// tulosta syötetyt numerot ja lähtöarvo
näyttö ("Toinen luku on =", toinen_luku);
näyttö ("toinen_numero >> 2 =", tulos_2);
cout << endl;
paluu 0;
Esimerkki 7: Aseta bitti
Tässä esimerkissä on tarkoitus näyttää, kuinka tietty bitti asetetaan bittioperaattoreiden avulla.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen numero = 7, toinen luku = 9;
// tulosta syötteen numero - ensimmäinen_numero
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
// Aseta viides bitti
ensimmäinen_num | = (1UL << 5);
// Tulostustulos
näyttö ("Aseta ensimmäisen bitin viides bitti =", ensimmäinen numero);
cout << endl;
// tulosta syötteen numero - toinen_numero
cout << endl;
display ("Toinen luku on =", toinen_luku); // Aseta 6. bitti
toinen_luku | = (1UL << 6);
// Tulostustulos
näyttö ("Aseta sekunninluvun 6. bitti =", sekunninumero);
cout << endl;
paluu 0;
Esimerkki 8: Tyhjennä bitti
Tässä esimerkissä on tarkoitus näyttää, kuinka tietty bitti tyhjennetään bittioperaattoreiden avulla.
#sisältää#sisältää
#sisältää
käyttämällä nimitilaa vakio;
// display () -toiminto
void-näyttö (merkkijono print_msg, int-numero)
bitset<16> myBitSet (numero);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main ()
int ensimmäinen numero = 7, toinen numero = 9;
// tulosta syötteen numero - ensimmäinen_numero
cout << endl;
näyttö ("Ensimmäinen numero on =", ensimmäinen_luku);
// Tyhjennä 2. bitti
ensimmäinen_numero & = ~ (1UL << 2);
// Tulostustulos
näyttö ("Aseta ensimmäisen bitin toinen bitti =", ensimmäinen_ luku);
cout << endl;
// tulosta syötteen numero - toinen_numero
cout << endl;
näyttö ("Toinen luku on =", toinen_luku);
// Tyhjennä kolmas bitti
toinen_luku & = ~ (1UL << 3);
// Tulostustulos
näyttö ("Set second bitn of second_num =", second_num);
cout << endl;
paluu 0;
Johtopäätös
Bittikohtaista operaattoria käytetään ensisijaisesti yksittäisten bittien käsittelyyn kokonaisluku- ja merkkitietotyypille. Bittikohtaista operaattoria käytetään voimakkaasti sulautettujen ohjelmistojen kehittämisessä. Joten jos kehität laiteohjainta tai järjestelmää, joka on hyvin lähellä laitteistotasoa, kannattaa ehkä käyttää näitä bittioperaattoreita.