Bitno Operatorovi u C: I, ILI, XOR, Shift & Upotpuniti, dopuna

Što su Bitwise Operatorovi?

Bitno Operaulagatelji koriste se za manipuliranje podacima na razini bita, što se naziva i programiranje na razini bita. Bitno funkcionira na jednom ili više bitnih uzoraka ili binarnih brojeva na razini njihovih pojedinačnih bitova. Koriste se u numeričkim proračunima kako bi proces izračuna bio brži.

Slijedi popis bitovnih operatora koje nudi programski jezik 'C':

Operahumka Značenje
& Operator AND po bitovima
| Operator ILI po bitovima
^ Ekskluzivni operator OR po bitovima
~ Binarni jedan komplement Operator je unarni operator
<< Operater lijevog pomaka
>> Operator desnog pomaka

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

Bitovi logički operatori rade na podacima bit po bit, počevši od najmanjeg bita, tj. LSB bita koji je krajnji desni bit, radeći prema MSB (Most Significant Bit) koji je krajnji lijevi bit.

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

x y x & y x | tamo x^y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Bitwise I

Ovo je jedan od najčešće korištenih logičkih bitovnih operatora. Predstavlja se jednim znakom ampersand (&). Sa svake strane operatora (&) napisana su dva cjelobrojna izraza.
Rezultat operacije AND po bitovima je 1 ako oba bita imaju vrijednost kao 1; inače je rezultat uvijek 0.

Uzmimo da imamo 2 varijable op1 i op2 sa sljedećim vrijednostima:

Op1 = 0000 1101
Op2 = 0001 1001

Rezultat operacije AND na varijablama op1 i op2 bit će

Result = 0000 1001

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

Bitno ILI

Predstavljena je jednom okomitom crtom (|). Sa svake strane operatora (|) zapisana su dva cjelobrojna izraza.

Rezultat operacije ILI po bitovima je 1 ako barem jedan od izraza ima vrijednost 1; inače je rezultat uvijek 0.

Uzmimo da imamo 2 varijable op1 i op2 sa sljedećim vrijednostima:

Op1 = 0000 1101
Op2 = 0001 1001

Rezultat operacije OR na varijablama op1 i op2 bit će

Result = 0001 1101

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

Isključivo OR po bitovima

Predstavlja se simbolom (^). Sa svake strane operatora (^) napisana su dva cjelobrojna izraza.

Rezultat bitovne operacije Isključivo ILI je 1 ako samo jedan od izraza ima vrijednost 1; inače je rezultat uvijek 0.

Uzmimo da imamo 2 varijable op1 i op2 sa sljedećim vrijednostima:

Op1 = 0000 1101
Op2 = 0001 1001

Rezultat operacije XOR na varijablama op1 i op2 bit će

Result = 0001 0100

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

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

#include <stdio.h>
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 20
OR - Value of c is 21
Exclusive-OR - Value of c is 1

Operatori pomaka po bitovima

Operatori pomaka po bitu koriste se za pomicanje/pomicanje uzoraka bitova na lijevu ili desnu stranu. Lijevo i desno su dva operatora pomaka koje pruža '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 izvesti operaciju pomaka.
  • 'n' je ukupan broj bitnih pozicija koje moramo pomaknuti u cjelobrojnom izrazu.

Operacija pomaka ulijevo će pomaknuti 'n' broj bitova na lijevu stranu. Krajnji lijevi bitovi u izrazu će iskočiti, a n bitova s ​​vrijednošću 0 bit će popunjeno na desnoj strani.

Operacija desnog pomaka pomaknut će 'n' broj bitova na desnu stranu. Krajnji desni 'n' bitova u izrazu će iskočiti, a vrijednost 0 bit će ispunjena na lijevoj strani.

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

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

Shifts operatori se mogu kombinirati i tada se mogu koristiti za izdvajanje podataka iz cjelobrojnog izraza. Napišimo program za demonstraciju korištenja operatora bit-wise shift.

#include <stdio.h>
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 80
Right 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 bitne komplementacije

Bitni komplement se također naziva i nečijim komplementnim operatorom budući da uvijek uzima samo jednu vrijednost ili operand. To je unarni operator.

Kada izvršimo komplement na bilo kojem bitu, sve 1 postaju 0 i obrnuto.

Ako imamo cjelobrojni izraz koji sadrži 0000 1111 tada će nakon izvođenja operacije komplementiranja po bitovima vrijednost postati 1111 0000.

Operator bitnog komplementa označava se simbolom tilda (~).

Napišimo program koji demonstrira implementaciju operatora bit-komplementa.

#include <stdio.h>
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 operata o kojima smo do sada govorili:

#include <stdio.h>
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;          /*-49 = 11001111 */
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 prevedemo i pokrenemo program, on proizvodi sljedeći rezultat:

Bitwise AND Operator - x & y = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Complement Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

Rezime

  • Bitovi operatori poseban su skup operatora koji nudi 'C.'
  • Koriste se u programiranju na razini bitova.
  • Ovi se operatori koriste za manipuliranje bitovima cjelobrojnog izraza.
  • Logički, pomak i komplement su tri vrste bitovnih operatora.
  • Operator komplementa po bitovima koristi se za preokretanje bitova izraza.