Co jsou bitoví operátoři?
BITWISE OPERATORS se používají pro manipulaci s daty na bitové úrovni, nazývané také programování na bitové úrovni. Bitové operace fungují na jednom nebo více bitových vzorcích nebo binárních číslech na úrovni jejich jednotlivých bitů. Používají se v numerických výpočtech, aby byl výpočetní proces rychlejší.
Následuje seznam bitových operátorů poskytovaných programovacím jazykem „C“:
Operátor | Význam |
& | Bitový operátor AND |
| | Bitový operátor OR |
^ | Bitový operátor OR |
~ | Operátor doplňku Binary One je unární operátor |
<< | Operátor řazení vlevo |
>> | Operátor posunu doprava |
Bitové operátory nelze přímo aplikovat na primitivní datové typy, jako jsou float, double atd. Pamatujte vždy na jednu věc, že bitové operátory se většinou používají s celočíselným datovým typem kvůli jeho kompatibilitě.
Bitové logické operátory pracují na datech bit po bitu, počínaje nejméně významným bitem, tj. Bitem LSB, který je bitem úplně vpravo, směrem k MSB (Most Significant Bit), který je bitem úplně vlevo.
Výsledek výpočtu bitových logických operátorů je uveden v tabulce níže.
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 tomto výukovém programu se naučíte
- Co jsou bitoví operátoři?
- Bitové AND
- Bitové NEBO
- Bitově exkluzivní NEBO
- Operátory bitového posunu
- Operátor bitového doplňku
Bitové AND
Toto je jeden z nejčastěji používaných logických bitových operátorů. Je reprezentován jediným znakem ampersand (&). Na každou stranu operátoru (&) jsou zapsány dva celočíselné výrazy.
Výsledek bitové operace AND je 1, pokud mají oba bity hodnotu 1; jinak je výsledek vždy 0.
Uvažujme, že máme 2 proměnné op1 a op2 s následujícími hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledek operace AND na proměnných op1 a op2 bude
Result = 0000 1001
Jak vidíme, dvě proměnné jsou porovnávány kousek po kousku. Kdykoli je hodnota bitu v obou proměnných 1, pak bude výsledek 1 nebo jinak 0.
Bitové NEBO
Představuje to jediný svislý pruhový znak (|). Na celé straně operátoru (|) jsou zapsány dva celočíselné výrazy.
Výsledek bitové operace OR je 1, pokud alespoň jeden z výrazů má hodnotu 1; jinak je výsledek vždy 0.
Uvažujme, že máme 2 proměnné op1 a op2 s následujícími hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledek operace NE na proměnných op1 a op2 bude
Result = 0001 1101
Jak vidíme, dvě proměnné jsou porovnávány kousek po kousku. Kdykoli je hodnota bitu v jedné z proměnných 1, pak bude výsledek 1 nebo jinak 0.
Bitově exkluzivní NEBO
Je reprezentován symbolem (^). Na celé straně operátoru (^) jsou zapsány dva celočíselné výrazy.
Výsledek bitové operace Exclusive-OR je 1, pokud má pouze jeden z výrazů hodnotu 1; jinak je výsledek vždy 0.
Uvažujme, že máme 2 proměnné op1 a op2 s následujícími hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledek operace NE na proměnných op1 a op2 bude
Result = 0001 0100
Jak vidíme, dvě proměnné jsou porovnávány kousek po kousku. Kdykoli má pouze jedna proměnná hodnotu 1, pak je výsledek 0, jinak bude 0 výsledkem.
Napíšeme jednoduchý program, který předvede bitové logické operátory.
#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();}
Výstup:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Operátory bitového posunu
Operátory bitového posunu se používají k přesunu / posunu bitových vzorů na levou nebo pravou stranu. Vlevo a vpravo jsou dva operátoři směny poskytované znakem „C“, které jsou znázorněny takto:
Operand << n (Left Shift)Operand >> n (Right Shift)
Tady,
- operand je celočíselný výraz, na kterém musíme provést operaci posunu.
- 'n' je celkový počet bitových pozic, které musíme posunout v celočíselném výrazu.
Operace levého posunu posune počet bitů 'n' na levou stranu. Bity zcela vlevo ve výrazu budou vyskakovány a na pravé straně bude vyplněno n bitů s hodnotou 0.
Operace posunu doprava posune počet bitů 'n' na pravou stranu. 'N' bity zcela vpravo ve výrazu budou vyskakovány a hodnota 0 bude vyplněna na levé straně.
Příklad: x je celočíselný výraz s daty 1111. Po provedení operace posunu bude výsledek:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operátory směn lze kombinovat a poté je lze použít k extrakci dat z celočíselného výrazu. Napíšeme program, který demonstruje použití operátorů bitového posunu.
#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;}
Výstup:
Left shift - Value of c is 80Right shift - Value of c is 5
Po provedení operace levého posunu bude hodnota 80, jejíž binární ekvivalent je 101000.
Po provedení operace pravého posunu se hodnota změní na 5, jehož binární ekvivalent je 000101.
Operátor bitového doplňku
Bitový komplement se také nazývá jako operátor komplementu, protože vždy trvá pouze jednu hodnotu nebo operand. Je to unární operátor.
Když provádíme komplement na libovolných bitech, všechna 1 se stanou 0 a naopak.
Pokud máme celočíselný výraz, který obsahuje 0000 1111, pak po provedení operace bitového doplňku bude hodnota 1111 0000.
Operátor bitového doplňku je označen symbolem vlnovka (~).
Napíšeme program, který demonstruje implementaci operátoru bitového doplňku.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Výstup:
Complement - Value of c is -11
Zde je další program s příkladem všech dosud diskutovaných operatoří:
#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 );}
Poté, co program zkompilujeme a spustíme, vytvoří následující výsledek:
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
souhrn
- Bitové operátory jsou speciální sady operátorů poskytované znakem „C.“
- Používají se v programování na bitové úrovni.
- Tyto operátory se používají k manipulaci s bity celočíselného výrazu.
- Logické, posuvné a doplňkové jsou tři typy bitových operátorů.
- Operátor bitového doplňku se používá k obrácení bitů výrazu.