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