Wprowadzenie do operatorów bitowych w JavaScript
Operatory bitowe w JavaScript działają na operandach, operując na nich w postaci reprezentacji liczby binarnej (baza 2) (w szczególności liczby 32-bitowe), a nie w liczbie dziesiętnej (baza 10), liczb ósemkowych (baza 8) lub notacja liczb szesnastkowych (podstawa 16). Na przykład 1010 to binarna reprezentacja dziesiętnej liczby dziesiętnej. Operacje bitowe w JavaScript są wykonywane na operandach operatorów w ich reprezentacjach binarnych, ale dane wyjściowe są zawsze zwracane w standardowej postaci wartości liczbowych.
Bitowy operator w JavaScript konwertuje swoje operandy do postaci dopełniającej 2 ich 32-bitowej liczby całkowitej ze znakiem. Stąd, ilekroć operator pracuje nad liczbą całkowitą, wartość pochodna jest formą uzupełniającą 2 tej liczby całkowitej. Uzupełnienie liczby całkowitej 2 jest uzupełnieniem liczby 1 (tzn. Bitowa wartość nie liczby) plus 1.
Na przykład poniżej przedstawiono 32-bitową reprezentację liczby 7
00000000000000000000000000000111
Poniżej znajduje się uzupełnienie 1 ', tj. ~ 7
11111111111111111111111111111000
Poniżej znajduje się uzupełnienie 2, które jest równe -7
11111111111111111111111111111001
Operator bitowy | Stosowanie | Znaczenie |
Bitowe AND | x i y | Zwraca 1 w każdej pozycji bitu, jeśli oba odpowiadające bity mają wartość 1, w przeciwnym razie 0. |
Bitowe OR | x | y | Zwraca 1 w każdej pozycji bitu, jeśli dowolny z odpowiednich bitów ma wartość 1, w przeciwnym razie 0. |
Bitowy XOR | x y | Zwraca 0 w każdej pozycji bitu, jeśli oba odpowiadające bity mają wartość 1 lub 0 w przeciwnym razie 1, gdy bity są różne. |
Bitowe NIE | ~ x | Przerzuci bity argumentu x od 1 do 0 i odwrotnie. |
Przesunięcie w lewo | x << y | Przesunie bity w lewo na liczbie binarnej x o y bitów, popychając jednocześnie 0 z prawej strony. |
Znak propagujący przesunięcie w prawo | x >> y | Przesunie bity w prawo na liczbie binarnej x o y bitów, jednocześnie kopiując bity najbardziej w lewo w lewo, aby ukończyć 32 bity. |
Zero shift prawe przesunięcie | x >>> y | Przesunie bity w prawo na liczbie binarnej x o y bitów, popychając 0 na miejscu z lewej strony. |
Bitowe logiczne operatory w JavaScript
Bitowe operatory logiczne składają się ze wszystkich operatorów logicznych używanych w większości języków, ale różnią się one w pewien sposób, ponieważ bitowe operatory logiczne działają krok po kroku. Poniżej przedstawiono bitowe operatory logiczne używane w JavaScript:
1. Bitowe ORAZ
Jest to operator binarny oznaczony symbolem ampersand „&”, który wykonuje operację AND na kolejnych parach odpowiednich bitów swoich argumentów. Operator „&” zwróci 1 tylko wtedy, gdy oba bity 1 będą inne, zwróci 0. Dlatego możemy również skorelować operację AND z mnożeniem, ponieważ obie dadzą tę samą odpowiedź.
X | Y | X i Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Przykład
10 (podstawa 10) = 00000000000000000000000000001010
13 (podstawa 10) = 00000000000000000000000000001101
---------------------------
10 i 13 00000000000000000000000000001000 = 8 (podstawa 10)
2. Bitowe OR
Jest to operator binarny oznaczony symbolem pionowego paska „|”, który wykonuje operację OR na kolejnych parach odpowiednich bitów swoich argumentów. Operator „|” zwróci 1, jeśli jeden z bitów ma wartość 1 lub oba są równe 1, w przeciwnym razie zwróci 0. Bitowa operacja OR „|” różni się od logicznej operacji OR „||”, ponieważ działa krok po kroku.
X | Y | X | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Przykład
10 (podstawa 10) = 00000000000000000000000000001010
13 (podstawa 10) = 00000000000000000000000000001101
---------------------------
10 | 13 00000000000000000000000000001111 = 15 (podstawa 10)
3. Bitowy XOR
Jest to operator binarny oznaczony symbolem daszka „^”, który wykonuje operację XOR na kolejnych parach odpowiednich bitów swoich argumentów. Operator „^” zwróci 0, jeśli oba bity są takie same (tzn. Oba mają wartość 1 lub oba mają wartość 0), w przeciwnym razie zwróci 1.
X | Y | X Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Przykład
10 (podstawa 10) = 00000000000000000000000000001010
13 (podstawa 10) = 00000000000000000000000000001101
---------------------------
10 13 00000000000000000000000000000111 = 7 (podstawa 10)
4. Bitowe NIE
Jest to jednoargumentowy operator oznaczony symbolem tyldy „~”, który wykonuje operację NOT na odpowiednich bitach swojego argumentu. Operator „~” odwróciłby bity argumentu, tj. Przekształciłby 0 na 1 lub 1 na 0.
X | ~ X |
0 | 1 |
1 | 0 |
Przykład
10 (podstawa 10) = 00000000000000000000000000001010
---------------------------
~ 10 11111111111111111111111111110101
Operatory przesunięcia bitowego w JavaScript
W bitowym przesunięciu operacja przyjmuje również dwa argumenty, w których pierwszy argument jest liczbą binarną, na której zostanie wykonana operacja przesunięcia, a drugi argument określa liczbę bitów, o którą należy przesunąć pierwszy argument. Używany operator określa kierunek operacji zmiany w liczbie binarnej.
1. Bitowe lewe przesunięcie
Jest to operator binarny oznaczony symbolem „<<”. Ten operator przesunie skrajnie prawe bity pierwszego argumentu w lewo o wartość czasów drugiego argumentu. Bity przesunięte z prawej strony są zastępowane przez 0 w skrajnej prawej części dla każdej wykonanej operacji zmiany.
Przykład: 8 << 3 daje 64
8 (podstawa 10) = 00000000000000000000000000001000
---------------------------
8 << 3 00000000000000000000000001000000 = 64 (podstawa 10)
2. Bitowe przesunięcie w prawo
Jest to operator binarny oznaczony symbolem „>>>”. Ten operator przesunie najbardziej prawe bity pierwszego argumentu w prawo o wartość czasów drugiego argumentu. Bity przesunięte w lewo są zastępowane przez 0 w lewej części dla każdej wykonanej operacji zmiany.
Przykład: 8 >>> 3 daje 1
8 (podstawa 10) = 00000000000000000000000000001000
---------------------------
8 >>> 3 00000000000000000000000000000001 = 1 (podstawa 10)
-8 (podstawa 10) = 11111111111111111111111111111000
---------------------------
-8 >>> 3 00011111111111111111111111111111 = 536870911 (podstawa 10)
3. Znak bitowy propagujący przesunięcie w prawo
Jest to operator binarny oznaczony symbolem „>>”. Ten operator przesunie najbardziej prawe bity pierwszego argumentu w prawo o wartość czasów drugiego argumentu. Bity przesunięte z lewej strony są zastępowane bitem najbardziej w lewo (tj. Bitem znaku) w części najbardziej z lewej strony dla każdej wykonanej operacji przesunięcia.
Przykład: 8 >>> 3 daje 1
8 (podstawa 10) = 00000000000000000000000000001000
---------------------------
8 >> 3 00000000000000000000000000000001 = 1 (podstawa 10)
-8 (podstawa 10) = 11111111111111111111111111111000
---------------------------
-8 >> 3 11111111111111111111111111111111 = -1 (podstawa 10)
Wniosek
Argumenty są konwertowane na 32-bitowe liczby binarne i wyrażane w postaci bitów (tzn. 0 i 1). Liczby w argumentach, w których występuje więcej niż 32 bity, są odrzucane (najbardziej znaczący bit). Ta sama zasada obowiązuje, gdy podczas operacji zmiany, jeśli przesunięcie bitów w lewo, dodatkowe bity w msb są odrzucane, a podczas prawej zmiany, dodatkowy bit rosnący w skrajnej prawej części jest odrzucany.
Przed: 110011010100011101001000100000001110010010001
---------------------------
Po: 11101001000100000001110010010001
Każdy odpowiedni bit jest sparowany ze sobą, tj. Pierwszy bit z pierwszym bitem innych argumentów, drugi bit z drugim bitem i tak dalej.
Operator jest nakładany na każdy bit (dla operatora binarnego powinna to być para bitów), stąd w JavaScript nazywane operatorami bitowymi.
Praktyczne zastosowanie operatora bitowego to flagi bitowe, komunikacja przez gniazdo / porty, kompresja, szyfrowanie, maszyny stanów skończonych, grafika itp.
Polecane artykuły
To jest przewodnik po Bitwise Operators w JavaScript. Tutaj omawiamy wprowadzenie, typy operatorów bitowych w JavaScript, takich jak operatory logiczne i shift oraz ich operacje. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej-
- Kompilatory JavaScript
- Odwróć w JavaScript
- Dla pętli w JavaScript
- Wprowadzenie do JavaScript