C Bitovni operateri: AND, OR, XOR, Shift & Dopuna (s primjerom)

Sadržaj:

Anonim

Što su bitni operateri?

BITWISE OPERATORI koriste se za manipulaciju podacima na razini bita, koje se naziva i programiranje na razini bita. Bit-bit djeluje na jednom ili više uzoraka bita ili binarnih brojeva na razini njihovih pojedinačnih bitova. Koriste se u numeričkim proračunima kako bi postupak izračuna bio brži.

Slijedi popis bitnih operatora koje pruža programski jezik 'C':

Operater Značenje
& Bitni I operator
| Bitni ILI operator
^ Bitno ekskluzivni ILI operator
~ Binary One's Complement Operator je unarni operater
<< Operator lijeve smjene
>> Operator desne smjene

Bitni operatori ne mogu se izravno primijeniti na primitivne vrste podataka kao što su float, double, itd. Uvijek zapamtite jednu stvar da se bitni operatori uglavnom koriste s cjelobrojnim tipom podataka zbog njegove kompatibilnosti.

Logični logički operatori rade na podacima bit po bit, počevši od najmanje značajnog bita, tj. LSB bita koji je najdesniji bit, radeći prema MSB (najznačajnijem bitu) koji je krajnji lijevi bit.

Rezultat izračuna bitnih logičkih operatora prikazan je u donjoj tablici.

x g x & y x | g x y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

U ovom vodiču naučit ćete-

  • Što su bitni operateri?
  • Bitno I
  • Bitno ILI
  • Bitno ekskluzivno ILI
  • Operatori bitnog pomaka
  • Operator bitnog komplementa

Bitno I

Ovo je jedan od najčešće korištenih logičkih bitnih operatora. Predstavljen je jednim znakom ampersanda (&). Sa svake strane operatora (&) napisana su dva cjelobrojna izraza.

Rezultat bitne operacije AND je 1 ako oba bita imaju vrijednost 1; u suprotnom, rezultat je uvijek 0.

Uzmimo u obzir da imamo 2 varijable op1 i op2 sa vrijednostima kako slijedi:

Op1 = 0000 1101Op2 = 0001 1001

Rezultat operacije AND na varijablama op1 i op2 bit će

Result = 0000 1001

Kao što vidimo, dvije se varijable uspoređuju malo po malo. Kad god je vrijednost bita u obje varijable 1, tada će rezultat biti 1 ili 0.

Bitno ILI

Predstavlja se jednim znakom okomite trake (|). Sa svake strane operatora (|) napisana su dva cjelobrojna izraza.

Rezultat bitne ILI operacije je 1 ako barem jedan od izraza ima vrijednost 1; u suprotnom, rezultat je uvijek 0.

Uzmimo u obzir da imamo 2 varijable op1 i op2 sa vrijednostima kako slijedi:

Op1 = 0000 1101Op2 = 0001 1001

Rezultat operacije OR na varijablama op1 i op2 bit će

Result = 0001 1101

Kao što vidimo, dvije se varijable uspoređuju malo po malo. Kad god je vrijednost bita u jednoj od varijabli 1, tada će rezultat biti 1 ili 0.

Bitno ekskluzivno ILI

Predstavljen je simbolom (^). Sa svake strane operatora (^) napisana su dva cjelobrojna izraza.

Rezultat bitne operacije Exclusive-OR iznosi 1 ako samo jedan od izraza ima vrijednost 1; u suprotnom, rezultat je uvijek 0.

Uzmimo u obzir da imamo 2 varijable op1 i op2 sa vrijednostima kako slijedi:

Op1 = 0000 1101Op2 = 0001 1001

Rezultat operacije OR na varijablama op1 i op2 bit će

Result = 0001 0100

Kao što vidimo, dvije se varijable uspoređuju malo po malo. Kad god samo jedna varijabla ima vrijednost 1, tada je rezultat 0, a 0 će biti rezultat.

Napišimo jednostavan program koji prikazuje bitne logičke operatore.

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

Izlaz:

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

Operatori bitnog pomaka

Operatori bitnog pomaka koriste se za pomicanje / pomicanje bitnih obrazaca bilo na lijevu ili desnu stranu. Lijevo i desno su dva operatora smjene osigurana pomoću 'C' koji su predstavljeni na sljedeći način:

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

Ovdje,

  • operand je cjelobrojni izraz na kojem moramo izvršiti operaciju pomaka.
  • 'n' je ukupan broj bitskih položaja koje moramo pomaknuti u cjelobrojnom izrazu.

Operacija lijevog pomaka pomaknut će 'n' broj bitova na lijevu stranu. Iskočit će krajnji lijevi bitovi u izrazu, a s desne strane popunit će se n bitova s ​​vrijednošću 0.

Operacija desnog pomaka pomaknut će 'n' broj bitova na desnu stranu. Iskočit će krajnji desni 'n' bitovi u izrazu, a vrijednost 0 popunit će se s lijeve strane.

Primjer: x je cjelobrojni izraz s podacima 1111. Nakon izvođenja operacije smjene rezultat će biti:

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

Operatori pomaka mogu se kombinirati, a zatim se mogu koristiti za izdvajanje podataka iz cjelobrojnog izraza. Napišimo program koji će pokazati upotrebu operatora bitnog pomaka.

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

Izlaz:

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

Nakon izvođenja operacije lijevog pomaka vrijednost će postati 80 čiji je binarni ekvivalent 101000.

Nakon izvođenja operacije desnog pomaka, vrijednost će postati 5 čiji je binarni ekvivalent 000101.

Operator bitnog komplementa

Bitovni komplement naziva se i operatorom komplementa jer uvijek uzima samo jednu vrijednost ili operand. Unarni je operator.

Kada izvršimo dopunu na bilo kojem bitu, svi 1 postaju 0 i obrnuto.

Ako imamo cjelobrojni izraz koji sadrži 0000 1111, tada će nakon izvođenja bitne operacije komplementa vrijednost postati 1111 0000.

Bitni operator komplementa označen je simbolom tilda (~).

Napišimo program koji pokazuje provedbu bitnog operatora komplementa.

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

Izlaz:

Complement - Value of c is -11

Evo još jednog programa s primjerom svih dosad raspravljanih operata:

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

Nakon što kompajliramo i pokrenemo program, on daje sljedeći 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

Sažetak

  • Bitovni operatori su posebni skupovi operatora koje pruža "C."
  • Koriste se u programiranju na razini bita.
  • Ti se operatori koriste za manipulaciju bitovima cjelobrojnog izraza.
  • Logički, pomak i dopuna tri su vrste bitnih operatora.
  • Bitovni operator komplementa koristi se za preokretanje bitova izraza.