Operatory bitowe są wygodne w użyciu i mogą powodować błyskawiczne tworzenie kodu. Dowiedz się, czym są i jak z nich korzystać.

Operatory bitowe to takie, które działają na poziomie binarnym. Często są bardzo szybkie do wykonania i zazwyczaj działają na dwóch operandach.

Operatorów bitowych można używać do manipulowania liczbami binarnymi, optymalizowania kodu, kompresji danych i wdrażania technik graficznych lub programowania gier. Podobnie jak większość innych języków programowania, JavaScript doskonale obsługuje operacje bitowe.

Co to są operatorzy?

Większość języków programowania używa pojęcia „operatora” — symbolu, który nakazuje tłumaczowi wykonanie określonej operacji matematycznej, relacyjnej lub logicznej.

Jest wiele różne rodzaje operatorów JavaScript powinieneś wiedzieć, od tych, które wyglądają jak standardowe operatory matematyczne, takie jak „+”, do operatorów porównujących dwie wartości. Operatory bitowe to specjalny zestaw zajmujący się liczbami binarnymi.

Operator bitowy AND (&).

instagram viewer

Bitowe AND (&) operator porównuje odpowiednie bity dwójki operandy binarne — liczby zawierające tylko 0 i 1. Dla każdej pary bitów wejściowych odpowiedni bit wyjściowy to „1”, jeśli oba bity wejściowe mają wartość „1” lub „0” w przeciwnym razie.

Oto składnia bitowego operatora AND:

a & b

w tym przykładzie A I B to operandy, na których wykonujesz operację bitową.

Oto jak działa bitowy operator AND:

  1. Operacja AND dotyczy każdej pary odpowiednich bitów w A I B z prawej do lewej.
  2. Jeśli oba bity mają wartość 1, wynikiem jest 1. Jeśli któryś z bitów ma wartość 0, wynikiem jest 0.
  3. Wynikiem jest nowa liczba, w której każdy bit reprezentuje wynik operacji AND na odpowiednich bitach A I B.

Na przykład:

pozwalać = 50; // 00110010
pozwalać b = 100; // 01100100

pozwalać wynik = a & b; // 00100000

konsola.log (wynik); // 32

W powyższym przykładzie A wynosi 50 w systemie dziesiętnym, co odpowiada liczbie binarnej 00110010, oraz B to 100 w systemie dziesiętnym, co odpowiada liczbie binarnej 01100100. Operator AND porównuje każdą parę odpowiednich bitów od prawej do lewej i daje wynikową liczbę binarną 00100000, czyli 32 w systemie dziesiętnym.

Operator bitowy OR (|).

Bitowe LUB (|Operator ) porównuje odpowiednie bity dwóch operandów i zwraca „1”, jeśli jeden lub oba bity mają wartość „1” i „0”, jeśli oba bity są równe „0”.

Oto składnia bitowego operatora OR:

| B

Gdzie A I B są argumentami operacji.

Bitowy operator OR (|) działa tak samo jak bitowy operator AND. Jedyna różnica polega na tym, że operator OR zwraca „1”, jeśli „którykolwiek” z bitów ma wartość „1” i „0”, jeśli „oba” bity mają wartość „0”.

Na przykład:

pozwalać = 50; // 00110010
pozwalać b = 100; // 01100100

pozwalać wynik = | B; // 01110110

konsola.log (wynik); // 118

W powyższym przykładzie bitowy operator OR porównuje każdą parę bitów od prawej do lewej (tj. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, i tak dalej). Wynikowa liczba binarna to 01110110, czyli 118 w systemie dziesiętnym.

Bitowy operator XOR (^).

Bitowy XOR (^Operator ) porównuje odpowiednie bity dwóch operandów i zwraca „1”, jeśli jeden z operandów, ale nie oba, to „1” i „0”, jeśli oba operandy to „1” lub „0”.

Oto składnia bitowego operatora XOR:

a ^ b

Gdzie A I B są argumentami operacji.

Bitowy operator XOR działa tak samo jak bitowe operatory OR i AND. Jedyna różnica polega na tym, że zwraca „1”, jeśli „jeden, ale nie oba” operandy to „1” i „0”, jeśli „oba” operandy to „1” lub „0”.

Na przykład:

pozwalać = 50; // 00110010
pozwalać b = 100; // 01100100

pozwalać wynik = a ^ b; // 01010110

konsola.log (wynik); // 86

W powyższym przykładzie operator XOR porównuje każdą parę bitów od prawej do lewej (tj. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, i tak dalej). Wynikowa liczba binarna to 01010110, czyli 86 w systemie dziesiętnym.

Operator bitowy NOT (~).

Bitowe NIE (~) to operator jednoargumentowy, który działa na pojedynczej liczbie całkowitej poprzez odwrócenie wszystkich jej bitów. Innymi słowy, zmienia każdy bit „0” na „1”, a każdy bit „1” na „0”.

Oto składnia bitowego operatora NOT:

~c

Gdzie C jest operandem.

Bitowy operator NOT polega na odwróceniu wszystkich bitów operandu, w tym bitów znaku.

Na przykład:

pozwalać do = 10; // 00001010
pozwalać re = -10; // 11110110

konsola.log(~c); // 11110101
konsola.log(~d); // 00001001

W powyższym przykładzie operator NOT odwraca wszystkie bity (tj. 01, 10, itp.), w tym bity znaku.

Lewy Shift (<

Operator przesunięcia w lewo przesuwa bity podanej liczby w lewo. Operator przyjmuje dwa operandy: liczbę do przesunięcia i liczbę bitów, o które ma zostać przesunięta.

Oto składnia operatora przesunięcia w lewo:

a << b

Gdzie A jest operandem dla operatora przesunięcia w lewo, oraz B jest liczbą bitów, o którą operator przesunie operand.

Operator przesunięcia w lewo działa na zasadzie przesuwania każdego bitu operandu w lewo o określoną liczbę pozycji i odrzucania nadmiarowych bitów przesuniętych w lewo.

Na przykład:

pozwalać = 50; // 00110010
pozwalać b = 2;

pozwalać wynik = a << b; // 11001000

konsola.log (wynik); // 200

W powyższym przykładzie operator przesunięcia w lewo przesunął dziesiętną liczbę 50 liczby binarnej 00110010 o dwa miejsca. Wynikowa wartość binarna to 11001000, czyli 200 w postaci dziesiętnej.

Operator przesunięcia w prawo (>>) propagujący znak

Przesunięcie w prawo propagujące znak (>>) przesuwa bity liczby w prawo, zachowując znak oryginalnej liczby. Operator przyjmuje dwa operandy: liczbę do przesunięcia i liczbę bitów, o które ma zostać przesunięta.

Oto składnia operatora przesunięcia w prawo propagującego znak:

a >> b

Gdzie A jest operandem dla operatora przesunięcia w prawo, oraz B jest liczbą bitów, o którą operator przesunie operand.

Operator przesunięcia w prawo propagujący znak działa podobnie do operatora przesunięcia w lewo; jedyna różnica w trybie działania polega na tym, że przesunięcie w prawo zachowuje znak.

Na przykład:

pozwalać = -50; // 11001110
pozwalać b = 2;

pozwalać wynik = a >> b; // 11110011

konsola.log (wynik); // -13

W powyższym przykładzie operator przesunięcia w prawo przesunął ułamek dziesiętny -50 (11001110) o dwie spacje w prawo, co dało ułamek dziesiętny -13 (11110011).

Operator przesunięcia w prawo bez znaku (>>>).

Przesunięcie w prawo bez znaku (>>>Operator ) przesuwa bity liczby w prawo o określoną liczbę pozycji i wypełnia zerami puste miejsca po lewej stronie. Operator odrzuca nadmiarowe bity, które przesuwa w prawo.

Oto składnia operatora przesunięcia w prawo bez znaku:

>>> b

Gdzie A jest operandem dla operatora przesunięcia w prawo, oraz B jest liczbą bitów, o którą operator przesunie operand.

Operator przesunięcia w prawo bez znaku działa podobnie do przesunięcia w prawo. Jednak w przeciwieństwie do operatora przesunięcia w prawo (>>), nie zachowuje znaku liczby podczas przesuwania. Zamiast tego traktuje liczbę jako liczbę całkowitą bez znaku i wypełnia skrajny lewy bit zerem.

Na przykład:

pozwalać = -5; // 11111111 11111111 11111111 11111011
pozwalać b = 2;

pozwalać wynik = a >>> b; // 00111111 11111111 11111111 11111110

konsola.log (wynik); // 1073741822

W tym przykładzie operator przesunięcia w prawo bez znaku przesunął „-5” o dwie spacje w prawo, skutecznie usuwając znak i dając dziesiętny „1073741822”.

Zastosowania operatorów bitowych

Manipulując pojedynczymi bitami w liczbach binarnych, operatorzy bitowi mogą tworzyć złożone funkcje, które w innym przypadku są trudne lub niemożliwe do osiągnięcia przy użyciu tradycyjnych operacji arytmetycznych.

Zrozumienie, jak używać operatorów bitowych, może pomóc w tworzeniu wydajniejszych i wydajniejszych aplikacji internetowych.