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 (&).
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:
- Operacja AND dotyczy każdej pary odpowiednich bitów w A I B z prawej do lewej.
- Jeśli oba bity mają wartość 1, wynikiem jest 1. Jeśli któryś z bitów ma wartość 0, wynikiem jest 0.
- 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; // 01100100pozwalać 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; // 01100100pozwalać 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; // 01100100pozwalać 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. 0 → 1, 1 → 0, 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.