Operator pe biți în programarea C și C++

Publicat: 2022-12-09

În RAM, datele sunt organizate ca o secvență de octeți. Fiecare octet conține opt biți consecutivi. Operatorii biți C și C++ sunt de ajutor atunci când doriți să efectuați unele operații aritmetice pe biți de date. Ele sunt destul de rapide și sunt folosite ocazional pentru a spori eficiența unui program. Ei lucrează pe algoritmi pe biți care efectuează operații la nivel de biți sau manipulează biții în diferite moduri.

Tipurile de operator pe biți în C și C++:

  1. ȘI pe biți
  2. SAU pe biți
  3. Pe bit NU
  4. Bitwise Exclusive-Sau (XOR)
  5. Operator de schimb la stânga
  6. Operator schimbare dreapta

Să intrăm în detaliile fiecăruia dintre ele:

Cuprins

1. ȘI pe biți:

Operatorul AND pe biți în C sau C++ utilizează un singur ampersand (&). Este nevoie de două numere ca operanzi și efectuează AND pe toți biții lor. Rezultatul este 1 numai dacă ambii biți sunt 1. Dacă oricare dintre biți este 0, rezultatul este 0. În esență, acest operator binar în C & C++ ia AND logic al biților din fiecare poziție a celor două numere date din formă binară.

Exemplu:

Să presupunem că reprezentarea binară a două numere a și b este:

a = 01011000

b = 10111001

Deci, a și b = 00011000

După cum se vede din exemplul de mai sus, rezultatul arată „1” numai în acele locuri în care ambele numere a și b au 1. Pentru toate celelalte locuri, rezultatul arată „0”.

2. SAU pe biți:

În C și C++, Bitwise OR funcționează destul de similar cu bitwise AND. Singura diferență este că în operatorul SAU pe biți, pentru ca poziția bitului să fie „1” în rezultat, doar unul dintre cei doi biți ar trebui să fie „1”. Acest operator ia două numere ca operanzi și efectuează OR pe fiecare bit din cele două numere.

Funcționează în felul următor:

  • Dacă ambii biți sunt „1”, rezultatul este „1”.
  • Dacă ambii biți sunt „0”, rezultatul este „0”.
  • Dacă oricare dintre biți este „1”, rezultatul este „1”.

Este unul dintre cei mai simpli și mai des utilizați operatori C++ pe biți. Simbolul său este țeava |. Mai mult, este identic cu operatorul logic boolean ||.

Exemplu:

Să presupunem reprezentarea binară a două numere a| b este:

a = 01101001

b = 10111000

Deci, un| b = 11111001

3. Pe bit NU:

Cunoscut și sub numele de operatorul NOT pe biți, acesta întoarce fiecare bit din rezultat. Simbolul său este tilda (~). O modalitate ușoară de a reține funcționarea acestui operator este că tilde este ocazional cunoscut sub denumirea de twiddle, iar complementul bit-bit se răsucește pe fiecare bit. Înseamnă că dacă ai 1, rezultatul este 0 și invers. Cu alte cuvinte, acest operator pe biți din C și C++ ia un număr și inversează toți biții.

Când se determină cea mai mare valoare posibilă pentru orice număr fără semn, acesta este unul dintre cei mai utili operatori C++ pe biți .

Exemplu:

unsigned int num = ~0;

Aici, 0 înseamnă toate 0-urile: 00000000. Deci, implementarea operatorului Bitwise NOT dă rezultatul ca 1s: 11111111. Deoarece num este un int fără semn, nu trebuie să vă preocupați de biții de semn sau complementul a doi. 1s este cel mai mare număr posibil din rezultat.

Una dintre caracteristicile cruciale ale operatorului Bitwise NOT este Complementul 2. Complementul 2 al unui număr este egal cu complementul acelui număr plus 1.

Exemplu:

a = 00000000

Deci, complementul lui 2 = -(11111111+1) = -00000000 = -0(zecimal)

Notă: complementul pe biți al oricărui număr N este egal cu -(N+1).

Învață cursuri de dezvoltare software online de la cele mai bune universități din lume. Câștigați programe Executive PG, programe avansate de certificat sau programe de master pentru a vă accelera cariera.

4. Bitwise Exclusive-OR (XOR):

Operația Exclusive-OR acceptă două intrări și emite un 1 dacă una sau cealaltă intrări este 1. Dar rezultatul este 0 dacă ambele sunt 1. Dacă ambele intrări sunt 0 sau ambele sunt 1, rezultatul este 0. Rezultatul de XOR este 1 numai dacă cei doi biți sunt diferiți. Simbolul acestui operator binar în C & C++ este caret (^). Mai mult, acest operator pe biți în C & C++ este prescurtat ca XOR. Efectuează operația SAU exclusivă pe fiecare pereche de biți. Este esențial să rețineți că nu există o contrapartidă a unui operator boolean pentru acest operator.

Exemplu:

Să presupunem că avem două numere ca

a = 10101010

b = 01110010

Acum a ^ b = 10101010 ^ 01110010 = 11011000

Puteți înțelege XOR în felul următor. Să presupunem că ai un bit, fie 0, fie 1, pe care îl numești A. Acum, când iei A XOR 0, vei primi A înapoi. Deci, dacă A este 1, obțineți 1 și invers. Când luați A XOR 1, înseamnă că întoarceți A. Deci, dacă A este 1, obțineți 0 și invers.

Dacă implementați operația XOR pe biți de două ori, adică aveți doi biți, A și B și setați C = A XOR B, atunci executați C XOR B. În acest caz, rezultatul pe care îl obțineți este A XOR B XOR C. Fie răstoarnă fiecare bit din A de două ori, fie nu întoarce niciun pic. Prin urmare, pur și simplu primiți înapoi un A așa cum este.

Puteți considera operația binară XOR ca un fel de twiddle selectiv. Dacă implementați XOR pe două numere, dintre care unul este toate 1, rezultatul este echivalent cu un twiddle.

5. Operator schimbare stânga:

Acest operator pe biți mută toți biții la stânga cu un anumit număr de biți specificați. Pozițiile biților pe care operatorul de deplasare la stânga le-a golit sunt umplute cu 0. Simbolul său este <<.

În C sau C++, funcționează astfel încât să ia mai întâi două numere, la stânga mută biții primului operand, iar cel de-al doilea operand indică prin câte locuri pentru a muta numărul.

Sintaxă:

a <<= 5

Iată un exemplu de program C/C++ pentru a implementa operatorul de schimbare la stânga:

int main()

{

int a = 5;

a <<= 2;

count << “x : ” << x << endl;

}

Ieșire: a = 20

Cursuri populare și articole despre inginerie software

Programe populare
Program Executive PG în Dezvoltare Software - IIIT B Programul de Certificat Blockchain - PURDUE Programul de certificate de securitate cibernetică - PURDUE MSC în Informatică - IIIT B
Alte articole populare
Salariu inginer cloud în SUA 2021-22 Salariu AWS Solution Architect în SUA Salariu pentru dezvoltatori backend în SUA Salariu pentru Dezvoltator Front End în SUA
Salariu web developer in SUA Întrebări de interviu Scrum Master în 2022 Cum să începi o carieră în securitatea cibernetică în 2022? Opțiuni de carieră în SUA pentru studenții la inginerie

6. Operator schimbare dreapta:

Acest operator pe biți mută toți biții la dreapta cu un anumit număr de biți specificați. Simbolul său este >>. În C sau C++, acest operator ia mai întâi două numere, deplasează la dreapta biții primului operand, iar al doilea operand specifică cantitatea de deplasare a numărului.

Sintaxă:

a >>= 5

Un exemplu de program C/C++ pentru a implementa operatorul de schimbare la dreapta:

int main() {

int a = 5;

a >> = 2;

count << “x : ” << x << endl;

}

Ieșire: a = 1

Cursuri populare și articole despre inginerie software

Programe populare
Program Executive PG în Dezvoltare Software - IIIT B Programul de Certificat Blockchain - PURDUE Programul de certificate de securitate cibernetică - PURDUE MSC în Informatică - IIIT B
Alte articole populare
Salariu inginer cloud în SUA 2021-22 Salariu AWS Solution Architect în SUA Salariu pentru dezvoltatori backend în SUA Salariu pentru Dezvoltator Front End în SUA
Salariu web developer in SUA Întrebări de interviu Scrum Master în 2022 Cum să începi o carieră în securitatea cibernetică în 2022? Opțiuni de carieră în SUA pentru studenții la inginerie

Când ar trebui să utilizați operatorii pe biți în C și C++?

  • Economisește spațiu:

Operatorii pe biți ajută la economisirea spațiului. O problemă comună întâlnită atunci când lucrați la nivel de biți individuali este că, dacă doriți mai mult spațiu sau pentru a economisi timp, este posibil să trebuiască să reproiectați porțiunile uriașe ale programului dumneavoastră. Dar utilizarea operatorilor pe biți în C & C++ poate elimina dependențele; de exemplu, puteți folosi ~0 pentru a obține cel mai mare număr întreg posibil. Deplasarea biților pentru a se înmulți cu doi este o operație tipică. Prin urmare, nu afectează lizibilitatea, spre deosebire de utilizarea avansată a manipulării biților poate avea un impact în unele cazuri.

  • Criptare:

Dacă lucrați la un anumit tip de criptare sau la un sistem care are nevoie de câmpuri de biți pentru a stoca atributele booleene.

Fapte unice despre operatorii pe biți

  • SAU pe biți a două numere este pur și simplu suma acelor numere dacă nu este implicată nicio transportare. În caz contrar, trebuie pur și simplu să adăugați AND-ul lor pe biți. De exemplu, să presupunem că x = 5(101) și y = 2(010). Deoarece nu este implicată nicio transportare, suma este pur și simplu x|y. Dar, dacă acum schimbăm „x” la 6 (110), suma se va schimba în x|y + x&y deoarece acum este implicată transportul.
  • Operatorul XOR pe biți este cel mai valoros din punct de vedere al interviului tehnic. Un exemplu de una dintre problemele de interviu legate de aceasta este discutat aici. „Pentru setul dat de numere constând din toate elementele care apar de un număr par, cu excepția unui număr, aflați numărul impar.” Trebuie să faceți XOR la ​​toate numerele pentru a rezolva această problemă.
  • Operatorii de deplasare pe biți la dreapta și la stânga nu trebuie utilizați pentru numerele negative. Al doilea operand, care determină numărul de schimburi, conține un număr negativ, ceea ce duce la un comportament nedefinit în C & C++. De exemplu, rezultatele ambelor 1 >>- 1 și 1 << -1 sunt nedefinite.
  • Comportamentul este nespecificat dacă deplasarea numărului depășește capacitatea întregului. De exemplu, 1 << 65 nu este specificat dacă numerele întregi sunt stocate în format de 64 de biți.
  • Nu are loc nicio operațiune de schimbare dacă al doilea operand (cel care determină numărul de schimburi) este 0.

Începeți călătoria dvs. în domeniul informaticii cu UpGrad:

Dacă doriți să învățați în detaliu despre dezvoltarea front-end (JavaScript, HTML, CSS), backend (NoSQL-MongoDB) și microservicii, atunci puteți urma cursul de Master of Science în Computer Science de la UpGrad . Livrat de IIIT Bangalore și LJMU Alumni Status, acest curs vă ajută să vă obțineți cariera ca inginer software/dezvoltator full-stack cu giganții tehnologici din întreaga lume.

Cursul acoperă acces gratuit la Cariera de tranziție Bootcamp pentru programatori începători și non-tech. Veți învăța mai mult de zece limbaje și instrumente de programare în acest curs, pregătindu-vă temeinic pentru a prelua roluri complexe în industrie.

Care este utilizarea operatorilor pe biți în C++?

În C++, operatorii pe biți efectuează operații pe date întregi la nivel binar. Aceștia operează pe modele de biți care implică manipularea biților individuali. Prin urmare, o operație pe biți este cunoscută și ca programare la nivel de biți. Operatorii pe biți în C++ sunt utilizați în primul rând pentru calcule mai rapide, deoarece lucrează doar pe două cifre, adică 0 și 1. Acești operatori pot, de asemenea, să testeze și să schimbe biții efectivi.

Puteți utiliza operatorii de schimbare la stânga și la dreapta împreună într-un cod?

Da, puteți combina operatorii de deplasare la stânga și la dreapta și, după aceea, puteți extrage datele dintr-o expresie întreagă.

Operatorul complementar inversează întreaga secvență de cod?

Nu, nu este. Întoarce 1urile și 0urile. Deci, toate 1urile devin 0-uri și invers.

De ce celălalt nume al operatorului de complement pe biți este operatorul de complement al cuiva?

Motivul este că întotdeauna este nevoie de un singur operand sau valoare. Este un operator unar. Când efectuați o completare pe orice biți, toate 0urile devin 1 și invers. De exemplu, dacă aveți o expresie întreagă cu valoarea 1111 0000. După efectuarea operației de complement pe biți, valoarea devine 0000 1111.