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.
