Tempo/Numeri
Operazioni bit a bit
AND/OR/XOR/NAND/NOR/XNOR/NOT e scorrimenti su numeri interi di una larghezza definita (8/16/32/64 bit) in qualsiasi sistema numerico.
(numero di bit di scorrimento, numero decimale)
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
- Enter one or two numbers in any base (binary, hex, decimal) and pick an operation (AND, OR, XOR, NAND, NOR, XNOR, NOT, or a shift).
- Pick a bit width (8/16/32/64 bits) — it affects how NOT and shifts behave at the number's boundaries.
- The result is shown instantly in several number bases for easy comparison.
Common uses
- Working with permission or setting flags packed into a single number (file system access rights, for example).
- Debugging a network protocol or binary format where fields are packed at the individual-bit level.
- A teaching example for understanding binary number representation and operations on it.
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.
Articolo su questo strumento: Operazioni bit a bit: come funzionano AND, OR e XOR a livello di bit
Domande frequenti
Qual è la differenza tra AND, OR, XOR, NAND, NOR, XNOR e NOT?
AND dà 1 solo quando entrambi i bit sono 1, OR dà 1 quando almeno uno è 1, e XOR dà 1 quando i bit differiscono. NAND/NOR/XNOR sono le loro negazioni, e NOT inverte ogni bit di un singolo operando.
Come vengono gestiti l'ampiezza in bit e il segno di un numero?
Scegli un'ampiezza di 8/16/32/64 bit — le operazioni e gli spostamenti avvengono in quell'intervallo. I numeri negativi sono rappresentati in complemento a due, quindi il risultato di un NOT o di uno spostamento può sembrare inaspettato se sei abituato alla notazione decimale.
Qual è la differenza tra uno spostamento a sinistra e uno a destra?
Uno spostamento a sinistra (<<) aggiunge zeri a destra, moltiplicando di fatto per 2 elevato alla quantità di spostamento. Uno spostamento a destra può essere logico (aggiunge zeri a sinistra) o aritmetico (preserva il bit di segno) — il tipo dipende dalla modalità selezionata.
Perché un'espressione come "if (a & b == c)" spesso non funziona come ci si aspetta?
Nella maggior parte dei linguaggi, l'operatore di confronto == ha una precedenza maggiore rispetto all'operatore bit a bit &, quindi l'espressione viene valutata come "a & (b == c)", non come solitamente intende chi la scrive. Per evitare questa trappola, racchiudi sempre le operazioni bit a bit tra parentesi esplicite.
Perché usare flag bit a bit invece di variabili booleane separate?
Un insieme di flag racchiuso in un unico numero viene memorizzato e trasmesso in modo più compatto (ad esempio nei protocolli di rete o nei formati di file), e verificare o modificare una flag specifica con AND/OR/XOR è un'unica operazione veloce.