C Bitenkénti operátorok: AND, OR, XOR, Shift & Kiegészítés (példával)

Tartalomjegyzék:

Anonim

Mik azok a Bitenkénti operátorok?

A BITWISE OPERATORS az adatok bitszintű manipulálására szolgál, más néven bit szintű programozásra. A Bitenkénti egy vagy több bitmintán vagy bináris számmal működik az egyes bitjeik szintjén. Numerikus számításokban használják őket a számítási folyamat gyorsabbá tételére.

Az alábbiakban felsoroljuk a „C” programozási nyelv által megadott bitenkénti operátorokat:

Operátor Jelentése
& Bitenkénti ÉS operátor
| Bitenkénti VAGY operátor
^ Bitenként exkluzív VAGY operátor
~ A Binary One komplementer operátora unárikus operátor
<< Bal váltás kezelője
>> Jobb váltás kezelője

A bitenkénti operátorokat nem lehet közvetlenül alkalmazni olyan primitív adattípusokra, mint float, double, stb. Mindig emlékezzen arra, hogy a bitenkénti operátorokat kompatibilitása miatt többnyire az egész adattípussal együtt használják.

A bitenkénti logikai operátorok apránként dolgoznak az adatokon, kezdve a legkevésbé szignifikáns bittől, vagyis az LSB bittől, amely a jobb szélső bit, az MSB (Most Significant Bit) felé, amely a bal szélső bit.

A bitenkénti logikai operátorok kiszámításának eredményét az alábbi táblázat mutatja.

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

Ebben az oktatóanyagban megtanulja-

  • Mik azok a Bitenkénti operátorok?
  • Bitenkénti ÉS
  • Bitenként VAGY
  • Bitenként exkluzív VAGY
  • Bitenkénti váltás operátorok
  • Bitenkénti komplementer operátor

Bitenkénti ÉS

Ez az egyik leggyakrabban használt logikai bitenkénti operátor. Egyetlen jel és (&) jelöli. Két egész kifejezést írunk az (&) operátor mindkét oldalára.

A bitenkénti ÉS művelet eredménye 1, ha mindkét bit értéke 1; egyébként az eredmény mindig 0.

Vegyük figyelembe, hogy van két op1 és op2 változónk, amelyek értéke a következő:

Op1 = 0000 1101Op2 = 0001 1001

Az AND művelet eredménye lesz az op1 és op2 változókon

Result = 0000 1001

Mint láthatjuk, két változót hasonlítanak össze apránként. Amikor egy bit értéke mindkét változóban 1, akkor az eredmény 1 vagy 0 lesz.

Bitenként VAGY

Egyetlen függőleges oszlopjel (|) ábrázolja. Két egész kifejezést írunk a (|) operátor mindkét oldalára.

A bitenkénti OR művelet eredménye 1, ha a kifejezés legalább egyikének értéke 1; egyébként az eredmény mindig 0.

Vegyük figyelembe, hogy van két op1 és op2 változónk, amelyek értéke a következő:

Op1 = 0000 1101Op2 = 0001 1001

Az op1 és op2 változók OR műveletének eredménye az lesz

Result = 0001 1101

Mint láthatjuk, két változót hasonlítanak össze apránként. Amikor egy bit értéke az egyik változóban 1, akkor az eredmény 1 vagy 0 lesz.

Bitenként exkluzív VAGY

Szimbólum (^) ábrázolja. Két egész kifejezést írunk az (^) operátor mindkét oldalára.

A bitenkénti Exclusive-OR művelet eredménye 1, ha csak az egyik kifejezés értéke 1; egyébként az eredmény mindig 0.

Vegyük figyelembe, hogy van két op1 és op2 változónk, amelyek értéke a következő:

Op1 = 0000 1101Op2 = 0001 1001

Az op1 és op2 változók OR műveletének eredménye az lesz

Result = 0001 0100

Mint láthatjuk, két változót hasonlítanak össze apránként. Amikor csak egy változó tartja az 1 értéket, akkor az eredmény 0, más esetben 0 lesz az eredmény.

Írjunk egy egyszerű programot, amely bemutatja a bitenkénti logikai operátorokat.

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

Kimenet:

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

Bitenkénti váltás operátorok

A bitenkénti eltolás operátorok a bitminták balra vagy jobbra mozgatására / eltolására szolgálnak. Balra és jobbra a „C” által biztosított két műszakvezérlő az alábbiak szerint jelenik meg:

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

Itt,

  • az operandus egy egész kifejezés, amelyen végre kell hajtanunk az eltolási műveletet.
  • 'n' az a bitpozíciók száma, amelyeket el kell tolnunk az egész kifejezésben.

A bal váltási művelet az 'n' bitszámot bal oldalra tolja. A kifejezés bal szélső bitjei kiugranak, a jobb oldalon pedig n 0 értékű bit kerül kitöltésre.

A jobb váltási művelet az 'n' bitszámot a jobb oldalra tolja. A kifejezés jobb szélső 'n' bitje kiugrik, és a 0 érték kitöltődik a bal oldalon.

Példa: x egy egész kifejezés, 1111 adatokkal. A váltási művelet végrehajtása után az eredmény a következő lesz:

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

A műszak operátorok kombinálhatók, majd felhasználhatók az adatok kinyerésére az egész kifejezésből. Írjunk egy programot a bitenkénti váltás operátorok használatának bemutatására.

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

Kimenet:

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

A bal váltás művelet végrehajtása után az érték 80 lesz, amelynek bináris egyenértéke 101000.

A jobb váltás művelet elvégzése után az érték 5 lesz, amelynek bináris egyenértéke 000101.

Bitenkénti komplementer operátor

A bitenkénti kiegészítést komplementer operátornak is hívják, mivel mindig csak egy értéket vagy operandust vesz fel. Egyetlen operátor.

Ha bármelyik biten kiegészítünk, akkor az 1-ek 0-kká válnak, és fordítva.

Ha van egy egész kifejezés, amely 0000 1111-et tartalmaz, akkor a bitenkénti komplementer művelet elvégzése után az érték 1111 0000 lesz.

A bitenkénti komplementer operátort a tilde (~) szimbólum jelöli.

Írjunk egy programot, amely bemutatja a bitenkénti komplementer operátor megvalósítását.

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

Kimenet:

Complement - Value of c is -11

Itt van egy másik program, példával az összes eddig tárgyalt operára:

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

Miután lefordítottuk és futtattuk a programot, a következő eredményt kapta:

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

Összegzés

  • A bitenkénti operátorok a „C” által biztosított speciális operátorok.
  • Bites szintű programozásban használják őket.
  • Ezeket az operátorokat egy egész kifejezés bitjeinek manipulálására használják.
  • A logikai, a shift és a komplementer háromféle bitenkénti operátor.
  • Bitenkénti komplementer operátort használunk egy kifejezés bitjeinek megfordítására.