C ++

C ++ operaatorid biti kaupa

C ++ operaatorid biti kaupa
Selles artiklis käsitleme bitipõhiseid operaatoreid C ++ programmeerimiskeeles. Bitipõhiste toimingute üksikasjalikuks mõistmiseks näeme mitmeid töötavaid näiteid. C ++ versioonis töötavad bitipõhised operaatorid individuaalsete bitide tasemel.

Lühiülevaade Bitwise operaatoritest

Operaator on sümbol, mis käsib kompilaatoril teha teatud matemaatilisi või loogilisi toiminguid. C ++ keeles on mitut tüüpi operaatoreid, näiteks:

  1. Aritmeetikaoperaatorid
  2. Loogilised operaatorid
  3. Suheteoperaatorid
  4. Ülesandeoperaatorid
  5. Bitipõhised operaatorid
  6. Muud operaatorid

Kõik Bitwise operaatorid töötavad individuaalsete bitide tasemel. Bitipõhist operaatorit saab rakendada ainult täis- ja tähemärgi andmetüüpidele. Näiteks kui teil on täisarvu tüübi muutuja suurusega 32 bitti ja rakendate toimingut bitipidi EI, rakendatakse kõigi 32-bitiste bittide kaupa operaatorit. Nii et lõpuks muutuvad kõik muutuja 32 bitti.

C ++ versioonis on saadaval kuus erinevat bitipõhist operaatorit:

  1. Pikkade kaupa VÕI [tähistatud kui "|"]
  2. Pikkade kaupa AND [tähistatud kui “&”]
  3. Pikkade kaupa EI [tähistatud kui "~"]
  4. Bititi XOR [tähistatud tähega “^”]
  5. Biti kaupa vasak nihe [tähistatud kui “<<”]
  6. Parempoolne nihe paremal [tähistatud kui “>>”]

Bititi VÕI tõe tabel

Operaator Bitwise OR toodab 1, kui vähemalt üks operand on seatud väärtusele 1. Siin on operaatori Bitwise OR tõetabel:

Bitt-1 Bitt-2 Bitt-1 | Bitt-2
0 0 0
0 1 1
1 0 1
1 1 1

Pikkade ja tõde tabel

Biti kaupa annab AND operaatori 1, kui mõlemad operandid on seatud 1-le. Siin on operaatori Bitwise AND tõetabel:

Bitt-1 Bitt-2 Bit-1 ja Bit-2
0 0 0
0 1 0
1 0 0
1 1 1

Bititi EI tõde tabel

Operaator Bitwise EI pöörab operandi ümber. Siin on operaatori Bitwise NOT tõetabel:

Bitt-1 ~ Bit-1
0 1
1 0

Bitu XOR-i tõetabel

Biti XOR operaator toodab 1 siis ja ainult siis, kui üks operandidest on seatud 1-le. Siin on operaatori Bitwise AND tõetabel:

Bitt-1 Bitt-2 Bit-1 ^ Bit-2
0 0 0
0 1 1
1 0 1
1 1 0

Biti kaupa vasakpoolse vahetuse operaator

Vasakpoolse nihke vasakpoolne nihe operaator nihutab kõik bitid määratud arvu määratud bitide võrra. Kui lahkusite kõigi andmebittide nihutamisest 1-ga, korrutatakse algandmed 2-ga. Samamoodi, kui vasakule nihutate kõik andmebitid 2-ga, korrutatakse algandmed 4-ga.

Parempoolse vahetuse operaator

Operaator Bitwise Right Shift nihutab kõik bitid paremale määratud arvu määratud bitide võrra paremale. Kui nihutate kõik andmebitid paremale ühe võrra, jagatakse algandmed (täisarvude jagamine) 2-ga. Samamoodi, kui muudate kõik andmebitid paremale 2 võrra, jagatakse algandmed (täisarvu jagamine) 4-ga.

Näited

Kuna oleme mõistnud bitipõhiste toimingute põhimõiste, vaatame paari näidet, mis aitavad teil mõista bitipõhiseid toiminguid C ++ -s:

Näited 7 ja 8 on mõeldud bitipõhiste operaatorite reaalse kasutamise demonstreerimiseks C ++ programmeerimiskeeles.

Näide 1: bitipõhine VÕI operaator

Selles näidisprogrammis demonstreerime operaatorit Bitwise OR.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine ​​= 9, tulemus = 0;
// Toiming bititi või OR
tulemus = esimene_arv | teine_num;
// printige sisendnumbrid
cout << endl;
kuva ("Esimene number on =", esimene_arv);
kuva ("Teine number on =", teine_arv);
// printida väljundväärtus
kuva ("esimene_num | teine_number =", tulemus);
cout << endl;
tagastama 0;

Näide 2: bitipõhine JA operaator

Selles näidisprogrammis illustreerime operaatorit Bitwise AND.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine ​​= 9, tulemus = 0;
// Toiming bititi ja AND
tulemus = esimene_number & teine_num;
// printige sisendnumbrid
cout << endl;
kuva ("Esimene number on =", esimene_arv);
splay ("Teine number on =", teine_arv);
// printida väljundväärtus
kuva ("first_num & second_num =", tulemus);
cout << endl;
tagastama 0;

Näide-3: bittide kaupa EI operaator

Selles näidisprogrammis saame aru, kuidas operaator Bitwise NOT C-s töötab++.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine_arv = 9, tulemus_1 = 0, tulemus_2 = 0;
// Bititi EI toimi
tulemus_1 = ~ esimene_arv;
tulemus_2 = ~ teine_arv;
// printige sisendnumbrid ja väljundväärtus
cout << endl;
kuva ("Esimene number on =", esimene_arv);
kuva ("~ esimene_num =", tulemus_1);
cout << endl;
// printige sisendnumbrid ja väljundväärtus
kuva ("Teine number on =", teine_arv);
kuva ("~ second_num =", tulemus_2);
cout << endl;
tagastama 0;

Näide 4: Operaator bitipidi XOR

Selle programmi eesmärk on selgitada, kuidas operaator Bitwise XOR töötab C-s++.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine ​​= 9, tulemus = 0;
// Operatsioon bitipidi XOR
tulemus = esimene_num ^ teine_num;
// printige sisendnumbrid
cout << endl;
kuva ("Esimene number on =", esimene_arv);
kuva ("Teine number on =", teine_arv);
// printida väljundväärtus
kuva ("esimene_num ^ teine_num =", tulemus);
cout << endl;
tagastama 0;

Näide 5: vasakpoolse vahetuse operaator

Nüüd näeme operaatori Bitwise Left Shift näidet. Selles programmis oleme deklareerinud kaks täisarvu numbrit: esimene_arv ja teine_arv. Siin nihutatakse “first_num” vasakule ühe bitiga ja “second_num” vasakule kahe biti võrra.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine_arv = 9, tulemus_1 = 0, tulemus_2 = 0;
// Vasakpoolse nihutamise toiming bitipidi
tulemus_1 = esimene_arv << 1;
tulemus_2 = teine_arv << 2;
// printige sisendnumbrid ja väljundväärtus
cout << endl;
kuva ("Esimene number on =", esimene_arv);
kuva ("esimene_num << 1     =  ", result_1);
cout << endl;
// printige sisendnumbrid ja väljundväärtus
kuva ("Teine number on =", teine_arv);
kuva ("teine_num << 2    =  ", result_2);
cout << endl;
tagastama 0;

Näide 6: parempoolse vahetuse operaator

Nüüd näeme operaatori Bitwise Right Shift mõistmiseks veel ühte näidet. Oleme deklareerinud kaks täisarvu numbrit: esimene_arv ja teine_arv. Siin nihutatakse “first_num” ühe bitiga paremale ja “second_num” paremale kahe bitiga.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine_arv = 9, tulemus_1 = 0, tulemus_2 = 0;
// Operatsioon biti kaupa paremale
tulemus_1 = esimene_arv >> 1;
tulemus_2 = teine_arv >> 2;
// printige sisendnumbrid ja väljundväärtus
cout << endl;
kuva ("Esimene number on =", esimene_arv);
kuva ("esimene_num >> 1 =", tulemus_1);
cout << endl;
// printige sisendnumbrid ja väljundväärtus
kuva ("Teine number on =", teine_arv);
kuva ("teine_arv >> 2 =", tulemus_2);
cout << endl;
tagastama 0;

Näide 7: biti määramine

Selles näites kavatsetakse näidata, kuidas seada konkreetne bitt bitipõhiste operaatorite abil.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine ​​= 9;
// printige sisendnumber - esimene_arv
cout << endl;
kuva ("Esimene number on =", esimene_arv);
// Määra 5. bit
esimene_arv | = (1UL << 5);
// Prindiväljund
kuva ("Määra first_num = 5. bitt =", first_num);
cout << endl;
// printige sisendnumber - second_num
cout << endl;
display ("Teine number on =", teine_arv); // Määra 6. bit
teine_arv | = (1UL << 6);
// Prindiväljund
kuva ("Määra 6. bitt sekundi_arv =", teine_arv);
cout << endl;
tagastama 0;

Näide-8: tühjendage bitt

Selles näites kavatsetakse näidata, kuidas konkreetne bit tühistada bitipõhiste operaatorite abil.

# kaasata
# kaasata
# kaasata
nimeruumi kasutamine std;
// funktsioon display ()
tühine kuva (stringi print_msg, int number)

bitset<16> myBitSet (number);
cout << print_msg;
cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;

int main ()

int esimene_arv = 7, teine ​​= 9;
// printige sisendnumber - esimene_arv
cout << endl;
kuva ("Esimene number on =", esimene_arv);
// Kustuta 2. bitti
esimene_arv & = ~ (1UL << 2);
// Prindiväljund
kuva ("Määra esimese bitinumbri =", esimene_arv ");
cout << endl;
// printige sisendnumber - second_num
cout << endl;
kuva ("Teine number on =", teine_arv);
// Kustuta 3. bitti
teine_arv & = ~ (1UL << 3);
// Prindiväljund
kuva ("Määra sekundi_arv = 3. nupp =", teine_arv);
cout << endl;
tagastama 0;

Järeldus

Bitipõhist operaatorit kasutatakse peamiselt täis- ja tähemärgi andmetüübi üksikute bitide manipuleerimiseks. Bitipõhist operaatorit kasutatakse palju sisseehitatud tarkvara arendamisel. Niisiis, kui arendate seadme draiverit või riistvaratasemele väga lähedast süsteemi, võiksite kasutada neid bitipõhiseid operaatoreid.

Kuidas kuvada OSD ülekatet täisekraanil Linuxi rakendustes ja mängudes
Täisekraaniga mängude mängimine või rakenduste kasutamine häireteta täisekraanirežiimis võib teid paneelil või tegumiribal kuvatavast asjakohasest süs...
Viis parimat mängu püüdmise kaarti
Me kõik oleme YouTube'is voogesituse mänge näinud ja armastanud. PewDiePie, Jakesepticye ja Markiplier on vaid mõned tipptasemel mängijatest, kes on t...
Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...