Operatory bitowe 8.doc

(100 KB) Pobierz
Operatory bitowe

Operatory bitowe

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:

dec

bin

34

00100010

23

00010111

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ć:

dec

bin

34

00100010

23

00010111

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:

dec

bin

34

00100010

23

00010111

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..

dec

bin

34

00100010

∼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.

dec

bin

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

0

0

0

1

0

1

1

11 << 1

0

0

0

1

0

1

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: ...

Zgłoś jeśli naruszono regulamin