Informatyka
Kalkulator operacji bitowych
Wpisz dwie liczby dziesiętnie, szesnastkowo lub binarnie, wybierz operację i szerokość słowa: zobaczysz bity wejściowe i bity wyniku jedne pod drugimi, z wartością ze znakiem i bez znaku.
Do czego służą operacje na bitach
Operacje bitowe działają na każdej cyfrze binarnej osobno. AND zostawia 1 tylko tam, gdzie obie liczby mają 1, OR tam, gdzie ma ją choć jedna, XOR tam, gdzie się różnią, NOT odwraca wszystkie. To najprostsze instrukcje procesora i najszybsze.
Używa się ich do odczytu i ustawiania pojedynczych flag w liczbie, nakładania masek, np. sieciowych, uprawnień plików w Uniksie, kolorów zapisanych w jednej liczbie, sum kontrolnych i kryptografii. AND z 0x0F zachowuje cztery młodsze bity, OR z 0x80 ustawia najstarszy.
Przesunięcie w lewo o n pozycji mnoży przez 2^n, w prawo dzieli. Przy liczbach ujemnych liczy się różnica między przesunięciem logicznym, które wsuwa zera, a arytmetycznym, które kopiuje bit znaku: -16 >> 2 daje -4, a logiczne daje dużą liczbę dodatnią.
Częste błędy
- Zapominanie o szerokości słowa: NOT 0 to 255 na 8 bitach, ale 4294967295 na 32.
- Używanie przesunięcia logicznego na liczbie ze znakiem w oczekiwaniu dzielenia: liczby ujemne wymagają arytmetycznego.
- W JavaScripcie używanie & i | na liczbach powyżej 32 bitów: są po cichu obcinane. Do 64 bitów potrzebny jest BigInt.
Najczęstsze pytania
Czym różni się >> od >>>?
Oba przesuwają w prawo. >> jest arytmetyczne i kopiuje bit znaku, więc liczby ujemne pozostają ujemne; >>> jest logiczne, wsuwa zera i traktuje liczbę jako bez znaku.
Do czego służy XOR?
Do zamiany lub porównywania bitów: A XOR B pokazuje, które bity się różnią, A XOR A daje 0, a A XOR B XOR B wraca do A. Dlatego leży u podstaw sum kontrolnych, parzystości i wielu szyfrów.
Jak sprawdzić, czy bit jest ustawiony?
AND liczby z maską, w której tylko ten bit ma wartość 1: jeśli wynik nie jest zerem, bit jest ustawiony. Bit k ma maskę 1 << k.
Jak działa to obliczenie
Każda operacja działa na bitach na tej samej pozycji: AND = 1, gdy oba są 1, OR = 1, gdy choć jeden jest 1, XOR = 1, gdy się różnią, NOT odwraca. A << n = A · 2^n obcięte do szerokości w; A >>> n = ⌊A / 2^n⌋ bez znaku; A >> n dzieli z zachowaniem znaku. Rotacja w lewo o n to (A << n) OR (A >>> (w − n)). Wartość ze znakiem to wartość bez znaku minus 2^w, gdy najstarszy bit ma wartość 1.