Co robi operator "&", "|", "^" w kodzie i jak ustawić bit nr 5?
Bitowe operatory to podstawa wielu sztuczek programistycznych: maski uprawnień (Unix `chmod`), bit flags, optymalizacje liczbowe (`x & 1` zamiast `x % 2`), parsowanie protokołów sieciowych (TCP flags, kolory RGBA), zarządzanie pamięcią.
Wpisz dwie liczby w polach A i B (w dec, hex 0x, bin 0b, oct 0o, auto-wykrywa), wybierz szerokość (8-bit, 16-bit, 32-bit, 64-bit) i zobacz wszystkie operacje na żywo: AND, OR, XOR, NOT, przesunięcia, rotacje, popcount, lowest set bit.
Każdy wynik pokazany w siatce bitów (kliknij bit, żeby flipnąć), w binarnym, dec (signed + unsigned), hex i oct. Liczy się BigInt-em, więc 64-bit działa poprawnie nawet powyżej granicy `Number.MAX_SAFE_INTEGER`.
Jak korzystać
- Wybierz szerokość: 8 / 16 / 32 / 64 bity. To decyduje, ile bitów ma operand i jak liczone są nadmiarki (overflow).
- Włącz Signed, jeśli chcesz interpretować wartości jako two's complement (np. -1 w 8-bit = 0b11111111).
- Wpisz A i B. Akceptuje wszystkie formaty: `255`, `0xFF`, `0b11111111`, `0o377`. Auto-wykrywa typ na podstawie prefiksu.
- Kliknij bit w siatce, żeby flipnąć (toggle). Operacje przeliczają się od razu, wszystkie 12+ rezultatów aktualizują się na żywo.
- Dla przesunięć/rotacji ustaw n suwakiem. Dla operacji na pojedynczym bicie (set/clear/toggle/test) ustaw bit N.
- "Highlight differing bits" podświetla na pomarańczowo bity zmienione przez operację, łatwo zobaczysz, co dokładnie robi `XOR` czy `<<`.
- Skopiuj wynik dowolnego formatu (BIN, HEX, OCT, DEC) jednym kliknięciem.
Do czego się przydaje
Praktyczne sytuacje, w których trzeba znać operacje bitowe:
- Uprawnienia w Linuxie: `chmod 755` to maska bitowa. `rwxr-xr-x` = `0b111101101` = 0o755 = 493 dec. Każdy bit to jedna flaga (read/write/execute × owner/group/other).
- TCP/IP flags: header TCP ma 9 bitów flag (SYN, ACK, FIN, RST, PSH, URG...). Parser dekoduje je przez maski: `flags & 0x01` to FIN, `flags & 0x02` to SYN itd.
- Kolor RGBA: 32-bit pakuje 4 kanały po 8 bitów. `red = (color >> 24) & 0xFF`, `green = (color >> 16) & 0xFF`, itd.
- Flagi konfiguracyjne: biblioteki w C/Rust przekazują dziesiątki opcji jednym intem. `OPT_ASYNC | OPT_VERBOSE | OPT_RETRY`. Sprawdzenie: `if (opts & OPT_ASYNC)`.
- Hashe i kryptografia: implementacja MD5, SHA, AES używa rotacji (`ROL`, `ROR`), XOR-ów i przesunięć. Zwykle dla 32-bit.
- Bitmap indexes w bazach: Postgres, Oracle, MySQL używają operacji bitowych do filtrowania.
- Komunikacja z urządzeniami: Arduino, ESP32, Raspberry Pi sterują pinami GPIO przez `PORTB |= (1 << 5)`. Każdy bit = stan pinu.
- Networkowe maski adresów: `192.168.1.0/24` to maska `0xFFFFFF00`. Sprawdzenie czy IP należy do sieci: `(ip & mask) == network`.
- Algorytmy: bitset jako kompaktowy zbiór, Brian Kernighan do popcount, sito Eratostenesa na bitach.
Aby przeliczyć między systemami liczbowymi, użyj konwertera bin/hex/dec. Aby zobaczyć rozmiar w bajtach, konwerter rozmiarów.