C Bitvis operatører: AND, OR, XOR, Shift & Supplement (med eksempel)

Indholdsfortegnelse:

Anonim

Hvad er bitvise operatører?

BITWISE OPERATORS bruges til at manipulere data på bitniveauet , også kaldet bitniveau programmering. Bitwise fungerer på et eller flere bitmønstre eller binære tal på niveauet for deres individuelle bits. De bruges i numeriske beregninger for at gøre beregningsprocessen hurtigere.

Følgende er listen over bitvise operatører leveret af 'C' programmeringssprog:

Operatør Betyder
& Bitvis OG operatør
| Bitvis ELLER operatør
^ Bitvis eksklusiv ELLER operatør
~ Binary One's Complement Operator er en unary operator
<< Venstre skiftoperatør
>> Højre skiftoperatør

Bitvis operatorer kan ikke anvendes direkte til primitive datatyper som flyde, dobbelt osv. Husk altid en ting, som bitvis operatører for det meste bruges med heltal datatypen på grund af dens kompatibilitet.

De bitvise logiske operatører arbejder på dataene bit for bit, startende fra den mindst signifikante bit, dvs. LSB-bit, som er den længste bit, og arbejder mod MSB (Most Significant Bit), som er den længste venstre bit.

Resultatet af beregningen af ​​bitvise logiske operatorer er vist i nedenstående 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

I denne vejledning lærer du-

  • Hvad er bitvise operatører?
  • Bitvis OG
  • Bitvis ELLER
  • Bitvis eksklusiv ELLER
  • Bitvis skiftoperatører
  • Bitvis komplement operatør

Bitvis OG

Dette er en af ​​de mest anvendte logiske bitvise operatorer. Det er repræsenteret af et enkelt ampersand-tegn (&). To heltal udtryk er skrevet på hver side af operatoren (&).

Resultatet af bitvis AND-operation er 1, hvis begge bits har værdien 1; Ellers er resultatet altid 0.

Lad os overveje, at vi har 2 variabler op1 og op2 med værdier som følger:

Op1 = 0000 1101Op2 = 0001 1001

Resultatet af AND-operationen på variabler op1 og op2 vil være

Result = 0000 1001

Som vi kan se, sammenlignes to variabler lidt efter lidt. Når værdien af ​​en bit i begge variabler er 1, bliver resultatet 1 eller ellers 0.

Bitvis ELLER

Det er repræsenteret af et enkelt lodret stregtegn (|). To heltal udtryk skrives på hver side af (|) operatoren.

Resultatet af bitvis ELLER-operation er 1, hvis mindst et af udtrykket har værdien 1; Ellers er resultatet altid 0.

Lad os overveje, at vi har 2 variabler op1 og op2 med værdier som følger:

Op1 = 0000 1101Op2 = 0001 1001

Resultatet af ELLER-operationen på variabler op1 og op2 vil være

Result = 0001 1101

Som vi kan se, sammenlignes to variabler lidt efter lidt. Når værdien af ​​en bit i en af ​​variablerne er 1, bliver resultatet 1 eller ellers 0.

Bitvis eksklusiv ELLER

Det er repræsenteret af et symbol (^). To heltal udtryk skrives på hver side af operatoren (^).

Resultatet af den bitvise Exclusive-OR operation er 1, hvis kun et af udtrykket har værdien 1; Ellers er resultatet altid 0.

Lad os overveje, at vi har 2 variabler op1 og op2 med værdier som følger:

Op1 = 0000 1101Op2 = 0001 1001

Resultatet af ELLER-operationen på variabler op1 og op2 vil være

Result = 0001 0100

Som vi kan se, sammenlignes to variabler lidt efter lidt. Når kun en variabel har værdien 1, så er resultatet 0 ellers vil 0 være resultatet.

Lad os skrive et simpelt program, der demonstrerer bitvise logiske operatorer.

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

Produktion:

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

Bitvis skiftoperatører

De bitvise skiftoperatører bruges til at flytte / skifte bitmønstre enten til venstre eller højre side. Venstre og højre er to skiftoperatører leveret af 'C', som er repræsenteret som følger:

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

Her,

  • en operand er et heltal udtryk, som vi skal udføre skiftoperationen på.
  • 'n' er det samlede antal bitpositioner, som vi skal skifte i heltalets udtryk.

Venstre skift operation skifter 'n' antal bits til venstre side. De venstre bit i udtrykket poppes ud, og n bits med værdien 0 udfyldes på højre side.

Den højre skiftoperation skifter 'n' antal bits til højre side. De yderste 'n' bits i udtrykket poppes ud, og værdien 0 udfyldes på venstre side.

Eksempel: x er et heltal udtryk med data 1111. Efter udførelse af skiftoperation bliver resultatet:

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

Skiftoperatorer kan kombineres, så kan de bruges til at udtrække dataene fra heltalets udtryk. Lad os skrive et program for at demonstrere brugen af ​​bitvise skiftoperatører.

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

Produktion:

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

Efter udførelse af venstre skiftoperation bliver værdien 80, hvis binære ækvivalent er 101000.

Efter udførelse af den rigtige skiftoperation bliver værdien 5, hvis binære ækvivalent er 000101.

Bitvis komplement operatør

Det bitvise komplement kaldes også som ens komplementoperator, da det altid kun tager en værdi eller en operand. Det er en unary operatør.

Når vi udfører komplement på eventuelle bits, bliver alle 1'erne 0'er og omvendt.

Hvis vi har et heltalsudtryk, der indeholder 0000 1111, bliver værdien 1111 0000 efter at have udført bitvis komplementoperation.

Bitvis komplementoperator er betegnet med symbolet tilde (~).

Lad os skrive et program, der demonstrerer implementeringen af ​​bitvis komplementoperatør.

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

Produktion:

Complement - Value of c is -11

Her er et andet program med et eksempel på alle de hidtil diskuterede operatoer:

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

Når vi har kompileret og kørt programmet, giver det følgende resultat:

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

Resumé

  • Bitvis operatører er specielle operatørsæt leveret af 'C.'
  • De bruges i bit-niveau programmering.
  • Disse operatorer bruges til at manipulere bits i et heltal udtryk.
  • Logisk, skift og komplement er tre typer bitvise operatorer.
  • Bitvis komplementoperator bruges til at vende bitene i et udtryk.