Czas/Liczby

Operacje bitowe

AND/OR/XOR/NAND/NOR/XNOR/NOT oraz przesunięcia na liczbach całkowitych o zadanej szerokości (8/16/32/64 bity) w dowolnym systemie liczbowym.

Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.

How to use it

Common uses

Things to keep in mind

The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.

XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.

Artykuł o tym narzędziu: Operacje bitowe: jak działają AND, OR i XOR na poziomie bitów

Najczęstsze pytania

Jaka jest różnica między AND, OR, XOR, NAND, NOR, XNOR i NOT?

AND daje 1 tylko gdy oba bity są 1, OR daje 1 gdy co najmniej jeden jest 1, a XOR daje 1 gdy bity się różnią. NAND/NOR/XNOR to ich zaprzeczenia, a NOT odwraca każdy bit pojedynczego operandu.

Jak obsługiwana jest szerokość bitowa i znak liczby?

Wybierz szerokość 8/16/32/64 bitów — operacje i przesunięcia odbywają się w tym zakresie. Liczby ujemne są reprezentowane w uzupełnieniu do dwóch, więc wynik NOT lub przesunięcia może wyglądać nieoczekiwanie, jeśli jesteś przyzwyczajony do notacji dziesiętnej.

Dlaczego wyrażenie takie jak "if (a & b == c)" często nie działa zgodnie z oczekiwaniami?

W większości języków operator porównania == ma wyższy priorytet niż operator bitowy &, więc wyrażenie jest obliczane jako "a & (b == c)", a nie tak, jak zwykle zamierza autor. Aby uniknąć tej pułapki, zawsze ujmuj operacje bitowe w jawne nawiasy.

Dlaczego stosować flagi bitowe zamiast osobnych zmiennych logicznych?

Zestaw flag zapakowany w jedną liczbę jest przechowywany i przesyłany bardziej kompaktowo (np. w protokołach sieciowych lub formatach plików), a sprawdzenie lub zmiana konkretnej flagi za pomocą AND/OR/XOR to jedna szybka operacja.

Jaka jest różnica między przesunięciem w lewo a w prawo?

Przesunięcie w lewo (<<) dodaje zera po prawej stronie, efektywnie mnożąc przez 2 podniesione do potęgi przesunięcia. Przesunięcie w prawo może być logiczne (dodaje zera po lewej) lub arytmetyczne (zachowuje bit znaku) — typ zależy od wybranego trybu.

Artykuły: Czas/Liczby

Czas Unix: dlaczego komputery liczą czas od 1970 roku

Dlaczego 1 stycznia 1970 roku stał się punktem odniesienia czasu dla większości systemów komputerowych.

Wyrażenia cron: jak odczytać harmonogram zadań

Jak odczytać wyrażenie takie jak */15 * * * * i dokładnie wiedzieć, kiedy zadanie się uruchomi.

Systemy liczbowe: po co istnieją system dwójkowy, ósemkowy i szesnastkowy

Dlaczego kolor #FF5733 w CSS zapisany jest cyframi szesnastkowymi, a nie dziesiętnymi.

Różnica między datami: dlaczego liczenie dni jest trudniejsze, niż się wydaje

Dlaczego naiwne odejmowanie dat może dać błędny wynik przez lata przestępne.

Obliczanie wieku: dlaczego to nie proste odejmowanie lat

Dlaczego proste odjęcie roku urodzenia może dać wiek o rok większy niż rzeczywisty.

Strefy czasowe: dlaczego UTC to nie to samo co GMT

Dlaczego UTC nigdy nie zmienia się dwa razy w roku, podczas gdy czas w Londynie (GMT/BST) tak.

Kalkulator czasu trwania: jak poprawnie dodawać godziny, minuty i sekundy

Dlaczego przy dodawaniu minut i sekund trzeba "przenosić" resztę do następnej pozycji, tak jak przy dodawaniu dziesiętnym.

ISO 8601 Duration: jak zapisać czas trwania w standardowym formacie

Dlaczego zapis PT1H30M oznacza „1 godzina 30 minut", a nie „1 minuta 30 godzin".

Numer tygodnia: dlaczego różne kraje liczą tygodnie inaczej

Dlaczego 1 stycznia czasem należy do 52. lub 53. tygodnia poprzedniego roku według standardu ISO 8601.

Liczby rzymskie: jak działa system bez zera i pozycji

Dlaczego IV oznacza 4, a nie 6, i jak działa zasada odejmowania w liczbach rzymskich.

IEEE 754: dlaczego 0.1 + 0.2 nie równa się 0.3 w kodzie

Dlaczego niemal w każdym języku programowania 0.1 + 0.2 wyświetla 0.30000000000000004.

Liczba słownie: po co zamieniać cyfry na słowa

Dlaczego w dokumentach bankowych kwotę zapisuje się jednocześnie cyframi i słownie.