nazwa
skrót
symbol
suma bitowa
OR
|
iloczyn bitowy
AND
&
różnica bitowa
XOR
ˆ
negacja bitowa
NOT
∼
przesunięcie bitowe w lewo
-
<<
przesunięcie bitowe w prawo
>>
Na początku chciałem zaznaczyć, że operatory bitowe są bardzo specyficzne jeśli chodzi o działanie. Stosuje się je do bardziej skomplikowanych czynności. Tak więc na początku na pewno nie będziesz ich potrzebował. Po za tym operują one wartościach w postaci bitowej. Tak więc jeśli nie znasz systemu dwójkowego to.. Nie, nie przerywaj czytania. Skocz sobie do działu systemy liczbowe i wróć, gdy skończysz. Jak już wiesz, komputerom najlepiej pracuje się na liczbach w systemie 16-wym lub 2-wym. Aby zrozumieć operatory bitowe trzeba znać nieco system 2-wy. Skoro tutaj doszedłeś to zakładam, iż posiadasz pewną wiedzę na ten temat. Jeśli nie, to raz jeszcze odsyłam na inną stronę. Link znajduje się nieco wyżej. Ponieważ część tych operatorów jest zbliżonych do siebie działaniem, zatem omówię je na jednym przykładzie. Użyjemy dwóch liczb: 34 i 23.
dec
bin
34
00100010
23
00010111
operator | czyli suma bitowa lub bitowe OR. Działanie jest zasadniczo proste. Tutaj najlepiej jest wyjść od przykładu:
34 | 23
00110111
Bitowe OR sprowadza się do prostej czynności sprawdzenia układu zer i jedynek w liczbach poddawanych operacji. Każde wystąpienie jedynki zarówno w pierwszej, jak i w drugiej liczbie oznacza jedynkę. Widzisz tutaj zbliżone działanie do operatora sumy logicznej. Oczywiście! Tutaj też jest ta sama taktyka. Przynajmniej jedno z dwóch musi być prawdą [jedynka].
operator & czyli iloczyn bitowy lub bitowe AND. Działa on analogicznie, jak iloczyn logiczny. Mały przykład powinien wystarczyć:
34 & 23
00000010
Tuaj jest identycznie, jak w przypadku iloczynu logicznego. Aby umieścić jedynkę w wartości wynikowej w obu wartościach poddawanych operacji muszą być też jedynki. Wszystko najlepiej widać na przykładzie powyżej
operator ^ czyli symetryczna różnica bitowa lub po prostu bitowe XOR. Ten operator nie ma swojego odpowiednika wśród operatorów logicznych, więc nie będzie żadnej analogii :( Zasada działania jest nadal taka sama, czyli dokonanie pewnych modyfikacji na bitach. Zaczynamy jak zwykle od przykładu:
34 ^ 23
00110101
W zasadzie nie trzeba tutaj nic objaśniać, ale.. powiem krótko. Wszędzie tam, gdzie występują takie same znaki piszemy zero. W miejscach, gdzie są różne jedynkę. To tyle. Popatrz sobie na przykład i przeanalizuj go.
operator ∼ czyli negacja bitowa lub bitowe NOT. Jeśli zrozumiałeś działanie logicznego operatora negacji to właściwie te słowa są zbędne. No ale jak już zacząłem..
∼34
11011101
Cóż mogę powiedzieć. Chyba tylko tyle, że jego działanie polega na zamianie bitów. Warto też zapamiętać, iż ten operator jest jednoargumentowy, w wyniku czego powyżej nie ma już liczby 23.
operator << służy do przesuwania bitów w lewo. Początkowo może się to wydać nieco dziwne, a nawet zbędne. Zaręczam jednak, że tak nie jest. Przesunięcia bitowe są bardzo przydatne. Czasem mogą zostać użyte zamiast mnożenia, które jest bardzo powolne w stosunku do przesunięć. Weźmy liczbę 11, która w systemie binarnym ma postać: 00001011.
1. 11 << 1
2. 11 << 2
3. 11 << 3
Oczywiście same jedynki w przykładzie to czysty przypadek. Zapis 11 << 1 znaczy tyle co: W liczbie 11 zapisanej binarnie dokonaj przesunięcia bitów o jedno miejsce w lewo. Najlepiej to widać w formie słupkowej.
11
00001011
11 << 1
00010110
W wyniku tej operacji wszystkie bity zostały przesunięte o jedno miejsce w lewo. Bit znajdujący się na lewym końcu wyszedł po za zakres bajtu. Teraz jest 7 bitów. Oznacza to, że jednego brakuje :( Aby wszystko grało należy jeszcze doczepić jeden bit z prawej strony. Pytanie tylko: co tam umieścić? Tu jest pewien problem. W tym wypadku została dodana cyfra 0. Jednak to, czy podczas przesunięć zostanie użyte 0, czy 1 zależy po części od typu komputera. Na komputerach PC powinno być 0. Przyjmijmy więc, że zawsze będzie to ta cyfra. Wracając do naszego przykładu. Po przesunięciu otrzymaliśmy liczbę: 00010110. Jak myślisz ile to jest po naszemu? Bez jakichkolwiek przeliczeń mogę stwierdzić, że jest to 22. Pomyśl chwilę, jak do tego doszedłem. Dobra już mówię. Była liczba: 00001011. Po przesunięciu jest: 00010110. Jak Ci wiadomo w systemie dwójkowym liczby są reprezentowane w następujący sposób:
operacja
128
64
32
16
8
4
2
1
0
Tak się składa, że poruszając się w lewo o jedno miejsce wartość zwiększa się dwukrotnie. Skoro wszystkie bity zostały przesunięte o jedno miejsce w lewo to nastąpiło jakby pomnożenie całej liczby przez 2. Jak nie wierzysz to spróbuj na innych liczbach. Następnie mamy przykład: ...
ZAZZY