Operatory bitowe C: AND, OR, XOR, operacje dopełniania i przesunięcia

W tym samouczku poznasz wszystkie 6 operatorów bitowych w programowaniu w C z przykładami.

W jednostce arytmetyczno-logicznej (która znajduje się w CPU) operacje matematyczne, takie jak: dodawanie, odejmowanie, mnożenie i dzielenie, są wykonywane na poziomie bitów. Aby wykonywać operacje na poziomie bitowym w programowaniu w C, używane są operatory bitowe.

Operatorzy Znaczenie operatorów
& Bitowe i
| Bitowe OR
^ Bitowe XOR
~ Uzupełnienie bitowe
<< Przesuń w lewo
>> Przesuń w prawo

Operator bitowy AND &

Wyjście bitowego AND wynosi 1, jeśli odpowiednie bity dwóch operandów są równe 1. Jeśli którykolwiek z bitów operandu ma wartość 0, wynik odpowiadającego bitu jest szacowany na 0.

Załóżmy, że operacja bitowa AND na dwóch liczbach całkowitych 12 i 25.

 12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Bit Operacja 12 i 25 00001100 i 00011001 ________ 00001000 = 8 (dziesiętnie)

Przykład 1: bitowe AND

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

Wynik

 Wyjście = 8

Operator bitowego OR |

Wyjście bitowego OR wynosi 1, jeśli co najmniej jeden odpowiadający bit z dwóch operandów ma wartość 1. W programowaniu w języku C bitowy operator OR jest oznaczany przez |.

12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Bitowo LUB Operacja 12 i 25 00001100 | 00011001 ________ 00011101 = 29 (dziesiętnie)

Przykład 2: bitowe OR

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

Wynik

 Wyjście = 29

Operator bitowego XOR (wyłączne OR) ^

Wynik bitowego operatora XOR wynosi 1, jeśli odpowiednie bity dwóch operandów są przeciwne. Jest oznaczony przez ^.

 12 = 00001100 (binarnie) 25 = 00011001 (binarnie) Bitowo XOR Operacja 12 i 25 00001100 00011001 ________ 00010101 = 21 (dziesiętnie)

Przykład 3: Bitowe XOR

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

Wynik

 Wyjście = 21

Operator dopełniacza bitowego ~

Operator komplementu bitowego jest operatorem jednoargumentowym (działa tylko na jednym operandzie). Zmienia się z 1 na 0 i 0 na 1. Jest oznaczony przez ~.

 35 = 00100011 (binarnie) Uzupełnienie bitowe Operacja 35 ~ 00100011 ________ 11011100 = 220 (dziesiętnie) 

Przekręć operator dopełniacza bitowego w programowaniu w C.

Uzupełnienie bitowe 35 (~ 35) to -36 zamiast 220, ale dlaczego?

Dla dowolnej liczby całkowitej n będzie bitowe uzupełnienie n -(n+1). Aby to zrozumieć, powinieneś mieć wiedzę o uzupełnieniu do dwójki.

Uzupełnienie 2

Uzupełnieniem do dwóch jest operacja na liczbach binarnych. Uzupełnienie liczby do 2 jest równe uzupełnieniu tej liczby plus 1. Na przykład:

 Dziesiętne Uzupełnienie dwójkowe 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (dziesiętne) 1 00000001 - (11111110 + 1) = -11111111 = -256 (dziesiętne) 12 00001100 - (11110011 + 1) = -11110100 = -244 (dziesiętnie) 220 11011100 - (00100011 + 1) = -00100100 = -36 (dziesiętnie) Uwaga: Przepełnienie jest ignorowane podczas obliczania uzupełnień do 2. 

Uzupełnienie bitowe liczby 35 to 220 (dziesiętnie). Uzupełnienie dwójki do 220 to -36. W związku z tym wyjście wynosi -36 zamiast 220.

Uzupełnienie bitowe dowolnej liczby N to - (N + 1). Oto jak:

 bitowe uzupełnienie N = ~ N (reprezentowane w postaci uzupełnienia do 2) 2 'uzupełnienie ~ N = - (~ (~ N) +1) = - (N + 1) 

Przykład 4: Uzupełnienie bitowe

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

Wynik

 Wyjście = -36 Wyjście = 11

Operatory zmiany w programowaniu w 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 

Interesujące artykuły...