Co to są operatory bitowe?
OPERATORZY BITWISE są wykorzystywani do manipulowania danymi na poziomie bitowym, zwanym także programowaniem na poziomie bitowym. Bitowe działa na jednym lub więcej wzorach bitowych lub liczbach binarnych na poziomie ich poszczególnych bitów. Są używane w obliczeniach numerycznych, aby przyspieszyć proces obliczeniowy.
Poniżej znajduje się lista operatorów bitowych udostępnianych przez język programowania „C”:
Operator | Znaczenie |
& | Operator bitowy AND |
| | Operator bitowy OR |
^ | Bitowy wyłączny operator OR |
~ | Operator dopełniacza Binary One jest operatorem jednoargumentowym |
<< | Operator zmiany w lewo |
>> | Operator prawej zmiany |
Operatory bitowe nie mogą być bezpośrednio stosowane do pierwotnych typów danych, takich jak zmiennoprzecinkowe, podwójne itp. Zawsze pamiętaj o jednej rzeczy, że operatory bitowe są najczęściej używane z typem danych całkowitoliczbowych ze względu na jego kompatybilność.
Bitowe operatory logiczne pracują na danych bit po bicie, zaczynając od najmniej znaczącego bitu, tj. Bitu LSB, który jest najbardziej po prawej stronie, w kierunku MSB (najbardziej znaczącego bitu), który jest najbardziej lewostronnym bitem.
Wynik obliczeń bitowych operatorów logicznych przedstawiono w poniższej tabeli.
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 |
W tym samouczku nauczysz się:
- Co to są operatory bitowe?
- Bitowe AND
- Bitowe OR
- Wyłączny lub bitowy LUB
- Operatory przesunięcia bitowego
- Operator dopełniacza bitowego
Bitowe AND
Jest to jeden z najczęściej używanych logicznych operatorów bitowych. Jest reprezentowany przez pojedynczy znak ampersand (&). Po każdej stronie operatora (&) zapisano dwa wyrażenia całkowite.
Wynik operacji bitowej AND wynosi 1, jeśli oba bity mają wartość 1; w przeciwnym razie wynik zawsze wynosi 0.
Rozważmy, że mamy 2 zmienne op1 i op2 o następujących wartościach:
Op1 = 0000 1101Op2 = 0001 1001
Wynikiem operacji AND na zmiennych op1 i op2 będzie
Result = 0000 1001
Jak widać, bit po bicie porównuje się dwie zmienne. Ilekroć wartość bitu w obu zmiennych wynosi 1, wynikiem będzie 1 lub 0.
Bitowe OR
Jest reprezentowany przez pojedynczy pionowy znak kreskowy (|). Po każdej stronie operatora (|) zapisano dwa wyrażenia całkowite.
Wynik operacji bitowej OR to 1, jeśli przynajmniej jedno z wyrażeń ma wartość 1; w przeciwnym razie wynik zawsze wynosi 0.
Rozważmy, że mamy 2 zmienne op1 i op2 o następujących wartościach:
Op1 = 0000 1101Op2 = 0001 1001
Wynikiem operacji OR na zmiennych op1 i op2 będzie
Result = 0001 1101
Jak widać, bit po bicie porównuje się dwie zmienne. Ilekroć wartość bitu w jednej ze zmiennych wynosi 1, wynikiem będzie 1 lub 0.
Wyłączny lub bitowy LUB
Jest reprezentowany przez symbol (^). Po każdej stronie operatora (^) zapisano dwa wyrażenia całkowite.
Wynikiem bitowej operacji Exclusive-OR jest 1, jeśli tylko jedno wyrażenie ma wartość 1; w przeciwnym razie wynik zawsze wynosi 0.
Rozważmy, że mamy 2 zmienne op1 i op2 o następujących wartościach:
Op1 = 0000 1101Op2 = 0001 1001
Wynikiem operacji OR na zmiennych op1 i op2 będzie
Result = 0001 0100
Jak widać, bit po bicie porównuje się dwie zmienne. Jeśli tylko jedna zmienna ma wartość 1, wynikiem jest 0, w przeciwnym razie wynikiem będzie 0.
Napiszmy prosty program, który demonstruje bitowe operatory logiczne.
#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();}
Wynik:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Operatory przesunięcia bitowego
Operatory przesunięcia bitowego służą do przesuwania / przesuwania wzorów bitowych w lewo lub w prawo. Lewy i prawy to dwa operatory zmiany oznaczone literą „C”, które są przedstawione w następujący sposób:
Operand << n (Left Shift)Operand >> n (Right Shift)
Tutaj,
- operand jest wyrażeniem całkowitoliczbowym, na którym musimy wykonać operację przesunięcia.
- „n” to całkowita liczba pozycji bitów, które musimy przesunąć w wyrażeniu całkowitoliczbowym.
Operacja przesunięcia w lewo przesunie liczbę „n” bitów w lewą stronę. W wyrażeniu zostaną usunięte skrajne lewe bity, a n bitów o wartości 0 zostanie wypełnionych po prawej stronie.
Operacja przesunięcia w prawo przesunie liczbę „n” bitów w prawą stronę. Najbardziej prawe bity „n” w wyrażeniu zostaną usunięte, a wartość 0 zostanie wypełniona po lewej stronie.
Przykład: x jest wyrażeniem całkowitoliczbowym z danymi 1111. Po wykonaniu operacji przesunięcia wynik będzie:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Operatory przesunięć można łączyć, a następnie można ich użyć do wyodrębnienia danych z wyrażenia całkowitego. Napiszmy program, który zademonstruje użycie operatorów przesunięć bitowych.
#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;}
Wynik:
Left shift - Value of c is 80Right shift - Value of c is 5
Po wykonaniu operacji przesunięcia w lewo wartość wyniesie 80, którego binarny odpowiednik to 101000.
Po wykonaniu operacji przesunięcia w prawo wartość wyniesie 5, którego binarny odpowiednik to 000101.
Operator dopełniacza bitowego
Uzupełnienie bitowe jest również nazywane operatorem dopełnienia, ponieważ zawsze przyjmuje tylko jedną wartość lub operand. Jest to operator jednoargumentowy.
Kiedy wykonujemy uzupełnienie na dowolnych bitach, wszystkie jedynki stają się zerami i na odwrót.
Jeśli mamy wyrażenie całkowite, które zawiera 0000 1111, to po wykonaniu operacji uzupełniania bitowego wartość wyniesie 1111 0000.
Operator dopełniacza bitowego jest oznaczony tyldą symbolu (~).
Napiszmy program, który demonstruje implementację operatora dopełniacza bitowego.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Wynik:
Complement - Value of c is -11
Oto inny program, z przykładem wszystkich omówionych do tej pory operacji:
#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 skompilowaniu i uruchomieniu programu daje następujący wynik:
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
Podsumowanie
- Operatory bitowe to specjalny zestaw operatorów dostarczany przez „C”.
- Są używane w programowaniu na poziomie bitowym.
- Operatory te służą do manipulowania bitami wyrażenia będącego liczbą całkowitą.
- Logiczne, przesunięcie i dopełnienie to trzy typy operatorów bitowych.
- Operator dopełniacza bitowego służy do odwracania bitów wyrażenia.