W języku skryptowym JavaScript operatory: &, |, ^ należą do grupy operatorów
A. logicznych.
B. przypisania.
C. arytmetycznych.
D. bitowych.
Operatory &, | oraz ^ w JavaScript należą do operatorów bitowych, czyli takich, które wykonują operacje na pojedynczych bitach liczby całkowitej. W praktyce & oznacza bitowe AND, | oznacza bitowe OR, a ^ oznacza bitowe XOR, czyli alternatywę wykluczającą. JavaScript przed wykonaniem takiej operacji zamienia wartości na 32-bitowe liczby całkowite ze znakiem, wykonuje działanie na bitach, a potem zwraca wynik jako liczbę. Przykładowo 5 & 3 daje 1, bo zapis binarny 5 to 0101, a 3 to 0011, więc wspólny bit ustawiony na 1 zostaje tylko na końcu. Takie operatory spotyka się np. przy maskach bitowych, uprawnieniach, flagach konfiguracyjnych, optymalizacji prostych obliczeń albo pracy z danymi niskopoziomowymi. Moim zdaniem warto szczególnie uważać, żeby nie mylić ich z operatorami logicznymi && i ||, bo wyglądają podobnie, ale działają zupełnie inaczej. Dobra praktyka w kodzie JavaScript jest taka, żeby operatory bitowe stosować świadomie i czytelnie opisywać ich sens, np. nazwami stałych, ponieważ dla osoby czytającej kod po czasie sama maska bitowa może być trochę nieoczywista.
W tym pytaniu łatwo pomylić wygląd operatorów z ich rzeczywistym znaczeniem w JavaScript. Znaki &, | oraz ^ nie są operatorami przypisania, bo nie służą do nadawania wartości zmiennej. Do przypisania używa się przede wszystkim =, a także operatorów złożonych takich jak +=, -=, *= czy czasem &=, |= i ^=. I tu właśnie bywa pułapka: samo & nie przypisuje wyniku, dopiero połączenie go ze znakiem równości tworzy operator przypisania bitowego. To drobna różnica w zapisie, ale w programowaniu ma spore znaczenie. Nie są to też typowe operatory logiczne. W JavaScript operatory logiczne to głównie &&, || oraz !, używane w warunkach, np. gdy sprawdzamy, czy użytkownik jest zalogowany i ma odpowiednie uprawnienia. Pojedynczy znak & albo | działa na bitach liczb, a nie na wartościach logicznych w takim sensie jak warunek true albo false. Częsty błąd myślowy polega na tym, że ktoś widzi podobieństwo do && i ||, więc zakłada, że chodzi o tę samą grupę operatorów. No niestety, język jest tutaj dość dokładny. Nie są to również operatory arytmetyczne, mimo że wynik wygląda jak zwykła liczba. Operatory arytmetyczne wykonują działania typu dodawanie, odejmowanie, mnożenie, dzielenie, reszta z dzielenia czy potęgowanie. Operatory bitowe pracują niżej, na reprezentacji binarnej liczby, czyli na zerach i jedynkach. Z mojego doświadczenia dobrze jest zapamiętać prostą zasadę: pojedyncze &, | i ^ w JavaScript kojarzymy z bitami, a podwójne && i || z logiką warunków. To bardzo pomaga przy czytaniu kodu i unikaniu dziwnych błędów w instrukcjach if.