C Bitové operátory: AND, OR, XOR, operace doplňku a posunu

V tomto kurzu se dozvíte o všech 6 bitových operátorech v programování v C s příklady.

V aritmeticko-logické jednotce (která je v CPU) se matematické operace jako: sčítání, odčítání, násobení a dělení provádějí na bitové úrovni. K provádění operací na úrovni bitů v programování C se používají bitové operátory.

Operátoři Význam operátorů
& Bitové AND
| Bitové NEBO
^ Bitový XOR
~ Bitový doplněk
<< Posuňte doleva
>> Posuňte doprava

Bitový operátor AND

Výstup bitového AND je 1, pokud jsou odpovídající bity dvou operandů 1. Pokud je jeden bit operandu 0, je výsledek odpovídajícího bitu vyhodnocen na 0.

Předpokládejme bitovou operaci AND dvou celých čísel 12 a 25.

 12 = 00001100 (v binárním formátu) 25 = 00011001 (v binárním formátu) Bitová operace 12 a 25 00001100 a 00011001 ________ 00001000 = 8 (v desítkové soustavě)

Příklad č. 1: Bitové AND

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

Výstup

 Výstup = 8

Bitový operátor OR |

Výstup bitového OR je 1, pokud je alespoň jeden odpovídající bit ze dvou operandů 1. V programování C je bitový operátor OR označen |.

12 = 00001100 (v binárním formátu) 25 = 00011001 (v binárním formátu) po bitech NEBO provoz 12 a 25 00001100 | 00011001 ________ 00011101 = 29 (v desítkové soustavě)

Příklad č. 2: Bitový OR

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

Výstup

 Výstup = 29

Bitový operátor XOR (exkluzivní OR) ^

Výsledek bitového operátoru XOR je 1, pokud jsou odpovídající bity dvou operandů opačné. Označuje se ^.

 12 = 00001100 (v binárním formátu) 25 = 00011001 (v binárním formátu) Bitový provoz XOR 12 a 25 00001100 00011001 ________ 00010101 = 21 (v desítkovém formátu)

Příklad č. 3: Bitový XOR

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

Výstup

 Výstup = 21

Operátor bitového doplňku ~

Operátor bitového komplimentu je unární operátor (funguje pouze na jednom operandu). Mění 1 až 0 a 0 až 1. Je označen ~.

 35 = 00100011 (v binárním formátu) Bitový doplněk Provoz 35 ~ 00100011 ________ 11011100 = 220 (v desítkové soustavě) 

Twist v bitovém operátoru komplementu v programování C.

Bitový doplněk 35 (~ 35) je -36 místo 220, ale proč?

Pro jakékoli celé číslo n bude bitový doplněk n -(n+1). Abyste tomu porozuměli, měli byste znát doplněk 2.

Doplněk 2

Dvojkovým doplňkem je operace na binárních číslech. Doplněk čísla 2 se rovná doplňku tohoto čísla plus 1. Například:

 Doplněk Decimal Binary 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (desítkově) 1 00000001 - (11111110 + 1) = -11111111 = -256 (desetinně) 12 00001100 - (11110011 + 1) = -11110100 = -244 (desítkově) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desetinně) Poznámka: Přetečení je při výpočtu doplňku 2 ignorováno. 

Bitový doplněk 35 je 220 (v desítkové soustavě). Doplněk 2 z 220 je -36. Proto je výstup -36 místo 220.

Bitový doplněk libovolného čísla N je - (N + 1). Zde je postup:

 bitový doplněk N = ~ N (reprezentovaný ve formě 2 doplňku) 2'komplement ~ N = - (~ (~ N) +1) = - (N + 1) 

Příklad č. 4: Bitový doplněk

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

Výstup

 Výstup = -36 Výstup = 11

Operátory směn v programování 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 

Zajímavé články...