Čo sú bitoví operátori?
BITWISE OPERÁTORY sa používajú na manipuláciu s údajmi na bitovej úrovni, ktorá sa tiež nazýva programovanie na bitovej úrovni. Bitové operácie pracujú s jedným alebo viacerými bitovými vzormi alebo binárnymi číslicami na úrovni ich jednotlivých bitov. Používajú sa v numerických výpočtoch na urýchlenie procesu výpočtu.
Nasleduje zoznam bitových operátorov poskytovaných programovacím jazykom „C“:
Prevádzkovateľ | Význam |
& | Bitový operátor AND |
| | Bitový operátor OR |
^ | Bitový operátor OR |
~ | Operátor doplnku Binary One je unárny operátor |
<< | Operátor zmeny vľavo |
>> | Operátor pravého posunu |
Bitové operátory nie je možné priamo aplikovať na primitívne dátové typy, ako sú float, double atď. Pamätajte vždy na jednu vec, že bitové operátory sa väčšinou používajú s celočíselným dátovým typom kvôli jeho kompatibilite.
Bitové logické operátory pracujú s dátami po bitoch, začínajúc od najmenej významného bitu, tj. LSB bit, ktorý je bitom úplne vpravo, smerom k MSB (Most Significant Bit), ktorý je bitom úplne zľava.
Výsledok výpočtu bitových logických operátorov je uvedený v nasledujúcej tabuľke.
X | r | x & y | x | r | x y |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
V tomto návode sa naučíte
- Čo sú bitoví operátori?
- Bitové AND
- Bitové ALEBO
- Bitový exkluzívny ALEBO
- Operátory bitového posunu
- Operátor bitového doplnku
Bitové AND
Toto je jeden z najbežnejšie používaných logických bitových operátorov. Je to reprezentované jedným znakom ampersand (&). Na každú stranu operátora (&) sú napísané dva celočíselné výrazy.
Výsledok bitovej operácie AND je 1, ak majú obidva bity hodnotu 1; inak je výsledok vždy 0.
Uvažujme, že máme 2 premenné op1 a op2 s nasledujúcimi hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledok operácie AND na premenných op1 a op2 bude
Result = 0000 1001
Ako vidíme, dve premenné sa porovnávajú bit po biti. Kedykoľvek je bitová hodnota v oboch premenných 1, potom bude výsledok 1 alebo inak 0.
Bitové ALEBO
Je to reprezentované jedným znakom zvislej čiary (|). Na každú stranu operátora (|) sú napísané dva celočíselné výrazy.
Výsledok bitovej operácie OR je 1, ak aspoň jeden z výrazov má hodnotu ako 1; inak je výsledok vždy 0.
Uvažujme, že máme 2 premenné op1 a op2 s nasledujúcimi hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledok operácie OR na premenných op1 a op2 bude
Result = 0001 1101
Ako vidíme, dve premenné sa porovnávajú bit po biti. Kedykoľvek je hodnota bitu v jednej z premenných 1, potom bude výsledok 1 alebo inak 0.
Bitový exkluzívny ALEBO
Predstavuje to symbol (^). Na celú stranu operátora (^) sú napísané dva celočíselné výrazy.
Výsledok bitovej operácie Exclusive-OR je 1, ak iba jeden z výrazov má hodnotu ako 1; inak je výsledok vždy 0.
Uvažujme, že máme 2 premenné op1 a op2 s nasledujúcimi hodnotami:
Op1 = 0000 1101Op2 = 0001 1001
Výsledok operácie OR na premenných op1 a op2 bude
Result = 0001 0100
Ako vidíme, dve premenné sa porovnávajú bit po biti. Kedykoľvek iba jedna premenná má hodnotu 1, potom je výsledok 0, inak bude 0.
Poďme napísať jednoduchý program, ktorý demonštruje 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ýkon:
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 posuvu sa používajú na posúvanie / posúvanie bitových vzorcov na ľavú alebo pravú stranu. Vľavo a vpravo sú dvaja operátori posunu poskytované znakom „C“, ktoré sú znázornené takto:
Operand << n (Left Shift)Operand >> n (Right Shift)
Tu,
- operand je celočíselný výraz, na ktorom musíme vykonať operáciu posunu.
- 'n' je celkový počet bitových pozícií, ktoré musíme posunúť v celočíselnom výraze.
Operácia ľavého posuvu posunie 'n' počet bitov na ľavú stranu. Bity vo výraze úplne vľavo budú vyskakovacie a na pravej strane bude vyplnených n bitov s hodnotou 0.
Operácia pravého posuvu posunie 'n' počet bitov na pravú stranu. 'N' bity úplne vpravo vo výraze sa vysunú a hodnota 0 sa vyplní na ľavej strane.
Príklad: x je celočíselný výraz s údajmi 1111. Po vykonaní operácie posunu bude výsledok:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operátory posunov je možné kombinovať a potom ich možno použiť na extrakciu údajov z celočíselného výrazu. Napíšme program na demonštráciu použitia operátorov 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ýkon:
Left shift - Value of c is 80Right shift - Value of c is 5
Po vykonaní operácie ľavého posunu bude hodnota 80, ktorej binárny ekvivalent je 101000.
Po vykonaní operácie posunu doprava bude hodnota 5, ktorej binárny ekvivalent je 000101.
Operátor bitového doplnku
Bitový doplnok sa tiež nazýva ako operátor komplementu, pretože trvá vždy iba jednu hodnotu alebo operand. Je to unárny operátor.
Keď vykonáme komplement na ľubovoľných bitoch, všetky jedničky sa stanú nulami a naopak.
Ak máme celočíselný výraz, ktorý obsahuje 0000 1111, potom po vykonaní operácie s bitovým doplnkom bude hodnota 1111 0000.
Operátor bitového doplnku je označený symbolom tilda (~).
Poďme napísať program, ktorý demonštruje implementáciu operátora bitového doplnku.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Výkon:
Complement - Value of c is -11
Tu je ďalší program s príkladom všetkých doteraz diskutovaných operatoňov:
#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 );}
Po zostavení a spustení programu vyprodukuje nasledujúci výsledok:
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
Zhrnutie
- Bitové operátory sú špeciálne operátorové množiny poskytované znakom „C.“
- Používajú sa pri programovaní na bitovej úrovni.
- Tieto operátory sa používajú na manipuláciu s bitmi celočíselného výrazu.
- Logické, posun a doplnok sú tri typy bitových operátorov.
- Operátor bitového doplnku sa používa na obrátenie bitov výrazu.