Poradnik Webmastera

Kanał ATOM

Zapisz się na darmowy newsletter:
E-mail:

Imię:

Zgadzam się z Polityką Prywatności

Po zapisaniu się otrzymasz ten ebook:
Jak zwiększyć ruch na stronie WWW? 120 praktycznych wskazówek
Valid XHTML 1.0 Strict
Poprawny CSS!
Tylko do końca listopada pobierz i przeczytaj bestseller motywacyjny "Motywacja bez granic" zanim zdecydujesz czy warto za niego zapłacić!

Operatory bitowe - Kurs języka JavaScript

<< Wstecz
Operatory logiczne
^^ Spis treściDalej >>
Operatory przypisania

Operatory bitowe są blisko spokrewnione z operatorami logicznymi - istnieje mianowicie iloczyn bitowy (operator &), suma bitowa (operator |) oraz negacja bitowa (operator ~). Różnica tutaj polega na tym, iż operują one na poszczególnych bitach liczby, a nie na wartościach logicznych jak operatory logiczne.

Każda liczba może zostać zapisana także w systemie dwójkowym (binarnym), gdzie każda cyfra będzie reprezentować jeden bit. Np. liczbie 10 w systemie dziesiętnym odpowiada liczna 1010 w systemie dwójkowym (1 * 23 + 0 * 22 + 1 * 21 + 0 * 20 = 1 * 8 + 1 * 2 = 10).

Operator negacji bitowej ~ (znak tylda) służy do negacji poszczególnych bitów w liczbie, np.:

var n = 10; // 00000000000000000000000000001010
n = ~n;     // 11111111111111111111111111110101

Powyższy wynik dotyczy oczywiście przypadku gdy liczby są 32-bitowe (tak jest zazwyczaj). Jeżeli spróbujesz go sobie wyświetlić jako liczbę, to zobaczysz że jest ona równa -11. Wynika to ze sposobu w jaki zapisywane są w pamięci komputera liczby - stosowany jest tzw. kod uzupełnień do 2, w skrócie U2. Więcej na ten temat możesz przeczytać np. w Wikipedii.

Operator iloczynu bitowego & sprawdza wartości poszczególnych bitów w liczbie, i na tej podstawie ustala wynik - jeżeli obydwa bity były równe 1, wynikowy bit też jest równy 1; w przeciwnym wypadku jest on równy 0.

var n1 = 12;      // 12 = 1100
var n2 = 10;      // 10 = 1010
var n3 = n1 & n2; //  8 = 1000

W przypadku operatora sumy bitowej | wynikowy bit jest równy jeden jeżeli co najmniej jeden z bitów w liczbach był równy 1.

var n1 = 12;      // 12 = 1100
var n2 = 10;      // 10 = 1010
var n3 = n1 | n2; // 14 = 1110

Oprócz wymienionych operatorów jest także operator różnicy symetrycznej XOR, który zapisuje się jako ^. Wynikiem działania tego operatora są wartości 1 na tych bitach, które były różne i 0 tam gdzie bity miały identyczne wartości.

var n1 = 12;      // 12 = 1100
var n2 = 10;      // 10 = 1010
var n3 = n1 ^ n2; //  6 = 0110

Dostępne są także operatory przesunięć bitowych, które przesuwają wszystkie bity w liczbie o określoną liczbę pozycji. Pierwszym z nich jest operator przesunięcia bitowego w lewo <<, który przesuwa bity w lewo o podaną liczbę pozycji:

var n = 12;      // 12 = 001100
n = n << 2;      // 48 = 110000

Drugim operatorem jest operator przesunięcia bitowego w prawo >>, który od powyższego różni się tylko kierunkiem przesuwania bitów:

var n = 48;      // 48 = 110000
n = n >> 2;      // 12 = 001100

Ostatni operator posiada także specjalną wersję, która traktuje liczby jako liczby bez znaku (jest on zapisywany jako >>>). Różnica w ich działaniu ujawnia się dla liczb ujemnych, które mają zawsze ustawiony najbardziej znaczący bit. Omawiany wcześniej operator spowoduje że ten bit nadal będzie ustawiony (liczba nadal będzie ujemna). Ten tutaj natomiast nie zrobi tego, przez co liczba zmieni się na dodatnią:

var n1 = -1, n2 = -13; //  -1 = 11111111111111111111111111110011
n1 = n1 >> 2;          //  -4 = 11111111111111111111111111111100
n2 = n2 >>> 2;  // 1073741820 = 00111111111111111111111111111100


Komentarze: 0

Dodaj nowy komentarz:










(wielkość liter ma znaczenie)

<< Wstecz
Operatory logiczne
^^ Spis treściDalej >>
Operatory przypisania
Wykop tą stronę! >>> dodajdo.com
Ile masz lat?
8 lub mniej
9 - 12
13 - 16
17 - 20
21 - 26
27 - 35
36 - 50
51 lub wiecej
Pokaż wyniki

Page copy protected against web site content infringement by Copyscape
Copyright © 2003-2008 Daniel "Sir Zooro" Frużyński
Powielanie i dalsze rozpowszechnianie bez zezwolenia zabronione