C Bitové operátory: AND, OR, XOR, operácie s komplementom a posunom

V tomto tutoriále sa na príkladoch dozviete o všetkých 6 bitových operátoroch v programovaní v jazyku C.

V aritmeticko-logickej jednotke (ktorá je v CPU) sa matematické operácie ako: sčítanie, odčítanie, násobenie a delenie vykonávajú na bitovej úrovni. Na vykonávanie operácií na úrovni bitov v programovaní C sa používajú bitové operátory.

Operátorov Význam operátorov
& Bitové AND
| Bitové ALEBO
^ Bitový XOR
~ Bitový doplnok
<< Posuňte doľava
>> Posuňte doprava

Bitový operátor AND

Výstup bitového operátora AND je 1, ak zodpovedajúce bity dvoch operandov sú 1. Ak je jeden bit operandu 0, výsledok zodpovedajúceho bitu sa vyhodnotí ako 0.

Predpokladajme bitovú operáciu AND dvoch celých čísel 12 a 25.

 12 = 00001100 (v binárnom formáte) 25 = 00011001 (v binárnom formáte) Bitová prevádzka v rozsahu 12 a 25 00001100 a 00011001 ________ 00001000 = 8 (v desatinnom formáte)

Príklad č. 1: Bitový operátor AND

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Výkon

 Výstup = 8

Operátor bitového operátora OR |

Výstup bitového operátora OR je 1, ak je aspoň jeden zodpovedajúci bit z dvoch operandov 1. V programovaní C je operátor bitového operátora OR označený |.

12 = 00001100 (binárne) 25 = 00011001 (binárne) bitové ALEBO prevádzka 12 a 25 00001100 | 00011001 ________ 00011101 = 29 (v desiatkovej sústave)

Príklad č. 2: Bitové ALEBO

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Výkon

 Výstup = 29

Bitový operátor XOR (exkluzívny OR) ^

Výsledok bitového operátora XOR je 1, ak sú zodpovedajúce bity dvoch operandov opačné. Označuje sa ^.

 12 = 00001100 (v binárnom formáte) 25 = 00011001 (v binárnom formáte) Bitová operácia XOR v rozsahu 12 a 25 00001100 00011001 ________ 00010101 = 21 (v desatinnom formáte)

Príklad č. 3: Bitový XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Výkon

 Výstup = 21

Operátor bitového doplnku ~

Operátor bitového komplimentu je unárny operátor (funguje iba na jednom operande). Mení sa od 1 do 0 a od 0 do 1. Je označená znakom ~.

 35 = 00100011 (v binárnom formáte) Bitový doplnok Prevádzka s hodnotou 35 ~ 00100011 ________ 11011100 = 220 (v desatinnom formáte) 

Twist v bitovom operátore komplementu v programovaní C.

Bitový doplnok 35 (~ 35) je -36 namiesto 220, ale prečo?

Pre každé celé číslo n bude bitový doplnok n -(n+1). Aby ste to pochopili, mali by ste mať vedomosti o doplnku 2.

Doplnok 2

Dvojkou je operácia na binárnych číslach. Doplnok čísla 2 sa rovná doplnku tohto čísla plus 1. Napríklad:

 Doplnok na desatinné binárne číslo 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (desatinné miesto) 1 00000001 - (11111110 + 1) = -11111111 = -256 (desatinné miesto) 12 00001100 - (11110011 + 1) = -11110100 = -244 (desatinné číslo) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desatinné číslo) Poznámka: Pri výpočte doplnku 2 sa ignoruje pretečenie. 

Bitový doplnok 35 je 220 (v desatinnej sústave). Doplnok 2 k číslu 220 je -36. Preto je výstup -36 namiesto 220.

Bitový doplnok ľubovoľného čísla N je - (N + 1). Tu je postup:

 bitový doplnok N = ~ N (zastúpený vo forme doplnku 2) 2'doplnok z ~ N = - (~ (~ N) +1) = - (N + 1) 

Príklad č. 4: Bitový doplnok

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Výkon

 Výstup = -36 Výstup = 11

Operátory radenia v programovaní v jazyku C.

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

Zaujímavé články...