Ce sunt operatorii Bitwise?
OPERATORII BITWISE sunt folosiți pentru manipularea datelor la nivelul de biți, numită și programare la nivel de biți. Bitwise operează pe unul sau mai multe modele de biți sau cifre binare la nivelul biților lor individuali. Acestea sunt utilizate în calcule numerice pentru a face procesul de calcul mai rapid.
Urmează lista operatorilor bit-bit furnizați de limbajul de programare „C”:
Operator | Sens |
& | Operator bitwise ȘI |
| | Operator SAU bit |
^ | Operator SAU exclusiv biți |
~ | Binary One's Complement Operator este un operator unar |
<< | Operator schimbare stânga |
>> | Operator de schimbare dreapta |
Operatorii bitwise nu pot fi aplicați direct la tipurile de date primitive, cum ar fi float, double, etc. Amintiți-vă întotdeauna un lucru că operatorii bitwise sunt utilizați în cea mai mare parte cu tipul de date întregi datorită compatibilității sale.
Operatorii logici în funcție de biți lucrează asupra datelor bit cu bit, începând de la bitul cel mai puțin semnificativ, adică bitul LSB care este cel mai din dreapta, lucrând către MSB (Most Significant Bit) care este cel mai din stânga.
Rezultatul calculului operatorilor logici în biți este prezentat în tabelul de mai jos.
X | y | X y | x | y | x y |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
În acest tutorial, veți învăța-
- Ce sunt operatorii Bitwise?
- Bitwise ȘI
- OR bit
- SAU exclusiv bit
- Operatori de schimbare bitwise
- Operator complement biți
Bitwise ȘI
Acesta este unul dintre cei mai frecvent utilizați operatori logici pe biți. Este reprezentat printr-un singur semn cu semn (&). Două expresii întregi sunt scrise pe fiecare parte a operatorului (&).
Rezultatul operației ȘI bit este 1 dacă ambii biți au valoarea 1; în caz contrar, rezultatul este întotdeauna 0.
Să considerăm că avem 2 variabile op1 și op2 cu valori după cum urmează:
Op1 = 0000 1101Op2 = 0001 1001
Rezultatul operației ȘI pentru variabilele op1 și op2 va fi
Result = 0000 1001
După cum putem vedea, două variabile sunt comparate bit cu bit. Ori de câte ori valoarea unui bit în ambele variabile este 1, atunci rezultatul va fi 1 sau altfel 0.
OR bit
Este reprezentat de un singur semn vertical (|). Două expresii întregi sunt scrise pe fiecare parte a operatorului (|).
Rezultatul operației OR în biți este 1 dacă cel puțin una dintre expresii are valoarea 1; în caz contrar, rezultatul este întotdeauna 0.
Să considerăm că avem 2 variabile op1 și op2 cu valori după cum urmează:
Op1 = 0000 1101Op2 = 0001 1001
Rezultatul operației OR asupra variabilelor op1 și op2 va fi
Result = 0001 1101
După cum putem vedea, două variabile sunt comparate bit cu bit. Ori de câte ori valoarea unui bit într-una din variabile este 1, atunci rezultatul va fi 1 sau altfel 0.
SAU exclusiv bit
Este reprezentat de un simbol (^). Două expresii întregi sunt scrise pe fiecare parte a operatorului (^).
Rezultatul operației bit-bit Exclusive-OR este 1 dacă numai una dintre expresii are valoarea 1; în caz contrar, rezultatul este întotdeauna 0.
Să considerăm că avem 2 variabile op1 și op2 cu valori după cum urmează:
Op1 = 0000 1101Op2 = 0001 1001
Rezultatul operației OR asupra variabilelor op1 și op2 va fi
Result = 0001 0100
După cum putem vedea, două variabile sunt comparate bit cu bit. Ori de câte ori o singură variabilă deține valoarea 1, atunci rezultatul este 0 altceva 0 va fi rezultatul.
Să scriem un program simplu care să demonstreze operatori logici în biți.
#includeint main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}
Ieșire:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Operatori de schimbare bitwise
Operatorii de schimbare bitwise sunt utilizați pentru a muta / deplasa modelele de biți fie în partea stângă, fie în partea dreaptă. Stânga și dreapta sunt doi operatori de schimburi furnizați de „C”, care sunt reprezentați după cum urmează:
Operand << n (Left Shift)Operand >> n (Right Shift)
Aici,
- un operand este o expresie întreagă pe care trebuie să efectuăm operația de schimbare.
- „n” este numărul total de poziții de biți pe care trebuie să le schimbăm în expresia întregului.
Operația de deplasare la stânga va deplasa numărul 'n' de biți spre partea stângă. Biții din stânga din expresie vor fi evidențiați și n biți cu valoarea 0 vor fi umpluți pe partea dreaptă.
Operația de schimbare dreaptă va deplasa numărul 'n' de biți pe partea dreaptă. Vor fi afișați cei mai buni „n” biți din expresie, iar valoarea 0 va fi completată în partea stângă.
Exemplu: x este o expresie întreagă cu date 1111. După efectuarea operației de schimbare, rezultatul va fi:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operatorii de ture pot fi combinați, apoi pot fi folosiți pentru a extrage datele din expresia întregului. Haideți să scriem un program pentru a demonstra utilizarea operatorilor de schimbare bitwise.
#includeint main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}
Ieșire:
Left shift - Value of c is 80Right shift - Value of c is 5
După efectuarea operației de schimbare la stânga, valoarea va deveni 80 al cărei echivalent binar este 101000.
După efectuarea operației de deplasare dreapta, valoarea va deveni 5 al cărei echivalent binar este 000101.
Operator complement biți
Complementul în biți este, de asemenea, numit operator de complement, deoarece ia întotdeauna o singură valoare sau un operand. Este un operator unar.
Când executăm complement pe orice biți, toți 1 devin 0 și invers.
Dacă avem o expresie întreagă care conține 0000 1111, atunci după efectuarea operației de completare bit, valoarea va deveni 1111 0000.
Operatorul complementului în biți este notat cu tilde simbol (~).
Haideți să scriem un program care să demonstreze implementarea operatorului de biți complement.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Ieșire:
Complement - Value of c is -11
Iată un alt program, cu un exemplu al tuturor operațiilor discutate până acum:
#includemain() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
După ce compilăm și rulăm programul, acesta produce următorul rezultat:
Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12
rezumat
- Operatorii bit-bit sunt un set special de operatori furnizați de „C.”
- Acestea sunt utilizate în programarea la nivel de biți.
- Acești operatori sunt utilizați pentru a manipula biți ai unei expresii întregi.
- Logic, shift și complement sunt trei tipuri de operatori bit-bit.
- Operatorul de complement biți este utilizat pentru a inversa biții unei expresii.