Kaj so bitni operaterji?
BITWISE OPERATORJI se uporabljajo za manipulacijo podatkov na bitni ravni, imenovano tudi programiranje na bitni ravni. Bit-bit deluje na enem ali več bitnih vzorcih ali binarnih številkah na ravni posameznih bitov. Uporabljajo se pri numeričnih izračunih za hitrejši postopek izračuna.
Sledi seznam bitnih operatorjev, ki jih zagotavlja programski jezik 'C':
Operater | Pomen |
& | Bitni operater AND |
| | Bitno ALI operator |
^ | Bitno ekskluzivni operater ALI |
~ | Binary One's Complement Operator je unarni operater |
<< | Levi menjalnik |
>> | Operater desne izmene |
Bitnih operatorjev ni mogoče neposredno uporabiti za primitivne tipe podatkov, kot so float, double itd. Vedno si zapomnite eno stvar, da se bitni operatorji večinoma uporabljajo s celoštevilskim podatkovnim tipom zaradi njegove združljivosti.
Bitni logični operaterji delujejo na podatke bit po bit, začenši z najmanj pomembnim bitom, tj. Bitom LSB, ki je skrajni desni bit, in deluje proti MSB (najpomembnejšemu bitu), ki je skrajno levi bit.
Rezultat izračuna bitnih logičnih operatorjev je prikazan v spodnji tabeli.
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 |
V tej vadnici boste izvedeli-
- Kaj so bitni operaterji?
- Bitovno AND
- Bitovno ALI
- Bitno izključno ALI
- Operatorji bitnih premikov
- Operator bitnega komplementa
Bitovno AND
To je eden najpogosteje uporabljenih logičnih bitnih operatorjev. Predstavlja ga en znak z znakom (&). Na vsaki strani operatorja (&) sta zapisana dva celoštevilčna izraza.
Rezultat bitne operacije AND je 1, če imata oba bita vrednost 1; v nasprotnem primeru je rezultat vedno 0.
Upoštevajmo, da imamo dve spremenljivki op1 in op2 z vrednostmi, kot sledi:
Op1 = 0000 1101Op2 = 0001 1001
Rezultat operacije AND na spremenljivkah op1 in op2 bo
Result = 0000 1001
Kot lahko vidimo, se dve spremenljivki primerjata po delih. Kadar je vrednost bitov v obeh spremenljivkah 1, bo rezultat 1 ali 0.
Bitovno ALI
Predstavlja ga en sam znak navpične vrstice (|). Na vsaki strani operaterja (|) sta zapisana dva celoštevilčna izraza.
Rezultat bitne operacije OR je 1, če ima vsaj en izraz vrednost 1; v nasprotnem primeru je rezultat vedno 0.
Upoštevajmo, da imamo dve spremenljivki op1 in op2 z vrednostmi, kot sledi:
Op1 = 0000 1101Op2 = 0001 1001
Rezultat operacije OR za spremenljivki op1 in op2 bo
Result = 0001 1101
Kot lahko vidimo, se dve spremenljivki primerjata po delih. Kadar je vrednost bitov v eni od spremenljivk 1, bo rezultat 1 ali 0.
Bitno izključno ALI
Predstavlja ga simbol (^). Na vsaki strani operatorja (^) sta zapisana dva celoštevilčna izraza.
Rezultat bitne operacije Exclusive-OR je 1, če ima samo en izraz vrednost 1; v nasprotnem primeru je rezultat vedno 0.
Upoštevajmo, da imamo dve spremenljivki op1 in op2 z vrednostmi, kot sledi:
Op1 = 0000 1101Op2 = 0001 1001
Rezultat operacije OR za spremenljivki op1 in op2 bo
Result = 0001 0100
Kot lahko vidimo, se dve spremenljivki primerjata po delih. Kadar samo ena spremenljivka vsebuje vrednost 1, je rezultat 0, rezultat pa bo 0.
Napišimo preprost program, ki prikazuje bitne logične operaterje.
#includeint 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();}
Izhod:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Operatorji bitnih premikov
Operatorji bitnega premika se uporabljajo za premikanje / premikanje bitnih vzorcev na levo ali desno stran. Levo in desno sta dva operaterja izmene, ki ju daje "C" in sta predstavljena na naslednji način:
Operand << n (Left Shift)Operand >> n (Right Shift)
Tukaj,
- operand je celoštevilčni izraz, na katerem moramo izvesti operacijo premika.
- 'n' je skupno število bitnih položajev, ki jih moramo prestaviti v celoštevilčnem izrazu.
Leva operacija premika bo premaknila 'n' število bitov na levo stran. Skrajni levi biti v izrazu bodo izpuščeni, na desni strani pa bo zapolnjenih n bitov z vrednostjo 0.
Z operacijo desnega premika bo 'n' število bitov premaknjeno na desno stran. Skrajni desni 'n' bitov v izrazu bodo izpuščeni, vrednost 0 pa bo izpolnjena na levi strani.
Primer: x je celoštevilčni izraz s podatki 1111. Po izvedbi operacije izmene bo rezultat:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operatorje premikov je mogoče kombinirati, nato pa ga uporabiti za pridobivanje podatkov iz celoštevilčnega izraza. Napišimo program, ki bo prikazal uporabo operatorjev bitnih premikov.
#includeint 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;}
Izhod:
Left shift - Value of c is 80Right shift - Value of c is 5
Po izvedbi operacije levega premika bo vrednost postala 80, katere binarni ekvivalent je 101000.
Po izvedbi operacije desnega premika bo vrednost postala 5, katere binarni ekvivalent je 000101.
Operator bitnega komplementa
Bitni komplement se imenuje tudi operater komplementa, saj ima vedno samo eno vrednost ali operand. Je unarni operater.
Ko izvedemo dopolnitev na poljubnih bitih, vsi 1 postanejo 0 in obratno.
Če imamo celoštevilčni izraz, ki vsebuje 0000 1111, potem bo po izvedbi operacije bitnega komplementa vrednost postala 1111 0000.
Operator bitnega komplementa je označen s simbolom tilda (~).
Napišimo program, ki prikazuje izvajanje bitnega operaterja komplementa.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Izhod:
Complement - Value of c is -11
Tu je še en program s primerom vseh doslej obravnavanih operatov:
#includemain() {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 );}
Ko zberemo in zaženemo program, prikaže naslednji 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
Povzetek
- Bitni operaterji so posebni operatorji, ki jih določa „C.“
- Uporabljajo se pri programiranju na ravni bitov.
- Ti operaterji se uporabljajo za manipulacijo bitov celoštevilskega izraza.
- Logični, premični in dopolnilni so tri vrste bitnih operatorjev.
- Operator bitnega komplementa se uporablja za obračanje bitov izraza.