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.

Saลพmite ovu objavu uz: