C Bitwise-operators: AND, OR, XOR, Shift & Aanvulling (met voorbeeld)

Inhoudsopgave:

Anonim

Wat zijn Bitwise-operators?

BITWISE OPERATORS worden gebruikt voor het manipuleren van gegevens op bitniveau, ook wel bitniveau-programmering genoemd. Bitwise werkt op een of meer bitpatronen of binaire cijfers op het niveau van hun individuele bits. Ze worden gebruikt in numerieke berekeningen om het rekenproces sneller te laten verlopen.

Hieronder volgt de lijst met bitsgewijze operators die worden geleverd door de programmeertaal 'C':

Operator Betekenis
Bitwise AND-operator
Bitsgewijze OR-operator
Bitsgewijze exclusieve OF-operator
De complementoperator van Binary One is een unaire operator
Linker shift operator
Rechter shift-operator

Bitsgewijze operatoren kunnen niet rechtstreeks worden toegepast op primitieve gegevenstypen zoals float, dubbel, enz. Onthoud altijd één ding dat bitsgewijze operatoren meestal worden gebruikt met het gegevenstype integer vanwege de compatibiliteit ervan.

De bitsgewijze logische operatoren werken bit voor bit aan de gegevens, beginnend bij het minst significante bit, dwz LSB bit dat het meest rechtse bit is, werkend naar het MSB (Most Significant Bit) dat het meest linkse bit is.

Het resultaat van de berekening van bitsgewijze logische operatoren wordt getoond in de onderstaande tabel.

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

In deze tutorial leer je-

  • Wat zijn Bitwise-operators?
  • Bitsgewijs EN
  • Bitsgewijs OF
  • Bitwise Exclusief OF
  • Bitwise shift-operators
  • Bitsgewijze complement-operator

Bitsgewijs EN

Dit is een van de meest gebruikte logische bitsgewijze operatoren. Het wordt weergegeven door een enkel ampersand-teken (&). Aan elke kant van de (&) - operator worden twee integer-uitdrukkingen geschreven.

Het resultaat van de bitsgewijze EN-bewerking is 1 als beide bits de waarde 1 hebben; anders is het resultaat altijd 0.

Laten we eens kijken dat we 2 variabelen op1 en op2 hebben met de volgende waarden:

Op1 = 0000 1101Op2 = 0001 1001

Het resultaat van de AND-bewerking voor variabelen op1 en op2 zal zijn

Result = 0000 1001

Zoals we kunnen zien, worden twee variabelen stukje bij beetje met elkaar vergeleken. Telkens wanneer de waarde van een bit in beide variabelen 1 is, is het resultaat 1 of anders 0.

Bitsgewijs OF

Het wordt weergegeven door een enkel verticaal staafje (|). Aan elke kant van de (|) - operator worden twee integer-uitdrukkingen geschreven.

Het resultaat van de bitsgewijze OR-bewerking is 1 als ten minste één van de uitdrukkingen de waarde 1 heeft; anders is het resultaat altijd 0.

Laten we eens kijken dat we 2 variabelen op1 en op2 hebben met de volgende waarden:

Op1 = 0000 1101Op2 = 0001 1001

Het resultaat van de OR-bewerking op variabelen op1 en op2 zal zijn

Result = 0001 1101

Zoals we kunnen zien, worden twee variabelen stukje bij beetje met elkaar vergeleken. Telkens wanneer de waarde van een bit in een van de variabelen 1 is, is het resultaat 1 of anders 0.

Bitwise Exclusief OF

Het wordt weergegeven door een symbool (^). Aan elke kant van de (^) -operator worden twee integer-uitdrukkingen geschreven.

Het resultaat van de bitsgewijze Exclusief-OF-bewerking is 1 als slechts één van de uitdrukkingen de waarde 1 heeft; anders is het resultaat altijd 0.

Laten we eens kijken dat we 2 variabelen op1 en op2 hebben met de volgende waarden:

Op1 = 0000 1101Op2 = 0001 1001

Het resultaat van de OR-bewerking op variabelen op1 en op2 zal zijn

Result = 0001 0100

Zoals we kunnen zien, worden twee variabelen stukje bij beetje met elkaar vergeleken. Wanneer slechts één variabele de waarde 1 bevat, is het resultaat 0, anders is 0 het resultaat.

Laten we een eenvoudig programma schrijven dat bitgewijze logische operatoren laat zien.

#include int 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();}

Uitgang:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Bitwise shift-operators

De bitsgewijze verschuivingsoperatoren worden gebruikt om de bitpatronen naar links of rechts te verplaatsen / verschuiven. Links en rechts zijn twee shift-operators die worden geleverd door 'C' die als volgt worden weergegeven:

Operand << n (Left Shift)Operand >> n (Right Shift)

Hier,

  • een operand is een expressie met een geheel getal waarop we de shift-bewerking moeten uitvoeren.
  • 'n' is het totale aantal bitposities dat we moeten verschuiven in de integer-uitdrukking.

De linker shift operatie zal het 'n' aantal bits naar links verschuiven. De meest linkse bits in de uitdrukking worden eruit gehaald en n bits met de waarde 0 worden aan de rechterkant gevuld.

De rechter shift operatie zal het 'n' aantal bits naar de rechterkant verschuiven. De meest rechtse 'n' bits in de uitdrukking worden eruit gehaald en de waarde 0 wordt aan de linkerkant gevuld.

Voorbeeld: x is een expressie van een geheel getal met gegevens 1111. Na het uitvoeren van een ploegendienst is het resultaat:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Verschuivingsoperatoren kunnen worden gecombineerd en vervolgens kan het worden gebruikt om de gegevens uit de expressie van een geheel getal te extraheren. Laten we een programma schrijven om het gebruik van bitsgewijze verschuivingsoperatoren te demonstreren.

#include int 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;}

Uitgang:

Left shift - Value of c is 80Right shift - Value of c is 5

Na het uitvoeren van de linker shift-handeling wordt de waarde 80 waarvan het binaire equivalent 101000 is.

Na het uitvoeren van de rechter shift-bewerking, wordt de waarde 5 waarvan het binaire equivalent 000101 is.

Bitsgewijze complement-operator

Het bitsgewijze complement wordt ook wel iemands complementoperator genoemd, omdat er altijd maar één waarde of een operand voor nodig is. Het is een unaire operator.

Als we complement op bits uitvoeren, worden alle enen nullen en vice versa.

Als we een expressie met een geheel getal hebben die 0000 1111 bevat, wordt de waarde na het uitvoeren van bitsgewijze complementbewerking 1111 0000.

Bitsgewijze complementoperator wordt aangeduid met het symbool tilde (~).

Laten we een programma schrijven dat de implementatie van een bitsgewijze complementoperator demonstreert.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Uitgang:

Complement - Value of c is -11

Hier is nog een programma, met een voorbeeld van alle operaties die tot nu toe zijn besproken:

#include main() {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 );}

Nadat we het programma hebben gecompileerd en uitgevoerd, levert het het volgende resultaat op:

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

Overzicht

  • Bitwise-operators zijn speciale operatorsets die worden geleverd door 'C.'
  • Ze worden gebruikt bij het programmeren op bitniveau.
  • Deze operatoren worden gebruikt om bits van een expressie van een geheel getal te manipuleren.
  • Logisch, verschuiven en complement zijn drie soorten bitsgewijze operatoren.
  • Bitsgewijze complementoperator wordt gebruikt om de bits van een uitdrukking om te keren.