Dopełnienie jedynkowe lub bitowa negacja: ~
Operator zmienia każde zero/jedynkę na jedynkę/zero:
~(00010010) == (11101101) wart = ~wart; // zmienia wartosc zmiennej wart
wartość zmiennej jest zmieniana po użyciu operatora przypisania. Operator ~ nie zmienia wartości zmiennej.
Bitowa koniunkcja (AND): &
Dwuargumentowy operator & tworzy nową wartość przez porównanie kolejnych bitów dwóch operandów. Bit w wartości wyjściowej jest równy 1 tylko wtedy, gdy oba odpowiadające mu bity w operandach są równe 1:
(00010010) & (10111101) == (00010000) (wart &= 0377) == (wart = wart & 0377);
Bitowa alternatywa (OR): |
Dwuargumentowy operator | tworzy nową wartość przez porównanie kolejnych bitów dwóch operandów. Bit w wartości wyjściowej jest równy 1, gdy przynajmniej jeden z odpowiadających mu bitów w operandach jest równy 1:
(00010010) | (10111101) == (10111111) (wart |= 0377) == (wart = wart | 0377);
Bitowa alternatywa wyłączająca (XOR): ^
Dwuargumentowy operator ^ tworzy nową wartość przez porównanie kolejnych bitów dwóch operandów. Bit w wartości wyjściowej jest równy 1, gdy dokładnie jeden z odpowiadających mu bitów w operandach jest równy 1:
(00010010) ^ (10111101) == (10101111) (wart ^= 0377) == (wart = wart ^ 0377);
Zastosowanie
Maski
Maska jest układem bitów, w którym niektóre bity Są włączone (1) lub wyłączone (0):
wart &= MASKA; // MASKA = 2; // (00000010)
przypisuje wartość 0 wszystkim bitom zmiennej wart z wyjątkiem bitu nr 1. Jeżeli bit nr 1 w zmiennej wart jest równy 1, bit pozostaje nie zmieniony, w przeciwnym wypadku zostaje zmieniony na 0.
Włączanie bitów
wart |= MASKA; // MASKA = 2; // (00000010)
instrukcja powoduje włączenie tylko tych bitów, które są włączone w stałej MASKA.
Wyłączanie bitów
wart |= ~MASKA; // MASKA = 2; // 2 = (00000010) // ~MASKA == (11111101)
instrukcja powoduje wyłączenie tylko tych bitów, które są włączone w stałej MASKA.
Odwracanie bitów
Jeśli b jest bitem (o wartości 1 lub 0), to 1^b daje 0, jeśli b jest równy 1, lub 1, gdy b jest równy 0. 0^b w każdym przypadku daje b.
(wart ^= MASKA) == (wart = wart ^ MASKA); // MASKA = 2; // 2 = (00000010)
Sprawdzenie wartości bitu
Sprawdzenie, czy bit nr 1 w zmiennej wart jest włączony, odbywa się poprzez zamaskowanie pozostałych bitów w zmiennej wart, tak aby porównywany był tylko bit nr 1:
if (wart & MASKA) == MASKA) // MASKA = 2
printf ("OK");
0 Komentarzy