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 bitowyStosowanieZnaczenie
Bitowe ANDx i yZwraca 1 w każdej pozycji bitu, jeśli oba odpowiadające bity mają wartość 1, w przeciwnym razie 0.
Bitowe ORx | yZwraca 1 w każdej pozycji bitu, jeśli dowolny z odpowiednich bitów ma wartość 1, w przeciwnym razie 0.
Bitowy XORx yZwraca 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~ xPrzerzuci bity argumentu x od 1 do 0 i odwrotnie.
Przesunięcie w lewox << yPrzesunie 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 prawox >> yPrzesunie 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ęciex >>> yPrzesunie 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ź.

XYX i Y
000
010
100
111

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.

XYX | Y
000
011
101
111

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.

XYX Y
000
011
101
110

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
01
10

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-

  1. Kompilatory JavaScript
  2. Odwróć w JavaScript
  3. Dla pętli w JavaScript
  4. Wprowadzenie do JavaScript