Simulatore di operazioni sui bit (AND, OR, XOR, NOT e scorrimenti)
Calcola su due numeri le operazioni AND, OR, XOR, NOT e gli scorrimenti a sinistra e a destra, mostrando in una griglia binaria come cambia ciascun bit. Sono previste ampiezze di 8, 16 e 32 bit.
Cosa sono le operazioni bit a bit (AND, OR, XOR, NOT, scorrimenti)
Le operazioni bit a bit trattano i numeri come sequenze di cifre binarie, cioè successioni di 0 e 1, ed eseguono un calcolo logico cifra per cifra. AND, OR, XOR, NOT e gli scorrimenti, a sinistra e a destra, ne sono i cinque rappresentanti principali. Si tratta in tutti i casi di istruzioni elementari eseguite direttamente dall'hardware del processore, e per questo sono molto più rapide delle operazioni aritmetiche tradizionali. Nei linguaggi di programmazione compaiono di norma con i simboli `&`, `|`, `^`, `~`, `<<` e `>>`, e trovano impiego nella gestione di indicatori di stato, nei permessi, nella crittografia e nell'elaborazione delle immagini.
Questo strumento permette di specificare il Valore A, il Valore B, usato da tutte le operazioni tranne NOT, e l'ampiezza in bit, scegliendo fra 8, 16 e 32 bit, per poi mostrare il risultato visualizzato bit per bit in una griglia. I valori si possono inserire in decimale oppure con i prefissi `0x`, per l'esadecimale, e `0b`, per il binario, in modo da rispecchiare la notazione usata nel codice sorgente. Un valore che superi l'ampiezza scelta non può essere rappresentato correttamente entro quei bit, per cui decidere l'ampiezza fin dall'inizio aiuta a interpretare bene il risultato che si ottiene.
Come usare il simulatore di operazioni bit a bit
- Scegliete l'ampiezza in bit Selezionate 8, 16 o 32 bit. Se non siete sicuri di quale scegliere, partite da 8 bit: la griglia resta compatta e i cambiamenti fra i bit si notano più facilmente.
- Scegliete l'operazione da calcolare Selezionate AND, OR, XOR, NOT oppure uno dei due scorrimenti. Scegliendo NOT, il modulo passa automaticamente a un solo campo di immissione, dato che questa operazione agisce su un unico valore.
- Inserite i valori da elaborare Digitate il Valore A, e il Valore B se l'operazione lo richiede, in decimale oppure con i prefissi `0x` o `0b`; per gli scorrimenti indicate anche di quanti bit far scorrere il valore.
- Leggete la griglia del risultato Il calcolo avviene in automatico non appena cambiate un valore. I bit evidenziati in giallo sono quelli che l'operazione ha effettivamente modificato rispetto al valore di partenza.
- Confrontate la rappresentazione decimale ed esadecimale Sotto la riga del risultato trovate lo stesso valore già convertito in decimale e in esadecimale, utile per verificare rapidamente la corrispondenza con ciò che avete scritto nel codice.
Consigli per sfruttarlo al meglio
- I valori si possono inserire non solo in decimale, ma anche in esadecimale con il prefisso `0x1A` o in binario con `0b1010`: potete provare direttamente le notazioni che usate scrivendo programmi.
- AND, OR e XOR operano su due valori, NOT su uno solo. Cambiando operazione, il numero dei campi di immissione si adegua da sé.
- Lo scorrimento a destra `>>>` è previsto soltanto nella forma logica. La differenza rispetto allo scorrimento aritmetico, che tiene conto del bit di segno, è illustrata nelle domande frequenti.
- Passando l'ampiezza da 8 a 16 e poi a 32 bit potete osservare come, a parità di valore, aumentino gli zeri nei bit più significativi: è un buon aiuto per afferrare il concetto di ampiezza.
- I bit evidenziati in giallo sono quelli cambiati fra prima e dopo l'operazione: con AND e OR si segue così a colpo d'occhio quale dei due valori in ingresso si sia riflesso nel risultato.
Quando tornano utili le operazioni bit a bit
Studio della programmazione e verifica degli operatori sui bit
Chi impara linguaggi come C, Java o Python incontra presto gli operatori `&`, `|`, `^`, `~`, `<<` e `>>`. NOT e gli scorrimenti sono difficili da calcolare a mente, e vedere il risultato in una griglia visiva aiuta a capire davvero cosa succede cifra per cifra.
Progettazione di indicatori di stato e sistemi di permessi
I permessi sui file di Unix, oppure la necessità di racchiudere in un solo numero intero molti stati acceso/spento, si basano su maschere di bit. Qui potete provare in anteprima una mascheratura con AND o l'accensione di un indicatore con OR prima di scriverla nel codice.
Programmazione competitiva e algoritmi basati su maschere di bit
Tecniche come la programmazione dinamica con maschere di bit o la rappresentazione di insiemi tramite interi sono comuni nelle gare di programmazione. Verificare il comportamento con valori piccoli prima di implementare l'algoritmo evita errori sottili.
Verifica delle conversioni fra esadecimale, binario e decimale
Mentre si osservano gli effetti di un'operazione, è comodo controllare al tempo stesso come lo stesso valore appaia in decimale, esadecimale e binario; per conversioni più estese conviene affiancare uno strumento dedicato di conversione di base numerica.
Codici colore e calcoli su indirizzi IP e maschere di sottorete
Estrarre le componenti rosso, verde e blu da un codice colore come #FF0000, oppure calcolare l'AND fra un indirizzo IP e la relativa maschera di sottorete, sono entrambe operazioni bit a bit che potete riprodurre e verificare direttamente qui.
Glossario delle operazioni bit a bit
- AND (congiunzione logica)
- Restituisce 1 soltanto quando entrambi i bit confrontati valgono 1, altrimenti restituisce 0. È l'operazione tipica per mascherare, cioè estrarre o azzerare, determinati bit di un valore.
- OR (disgiunzione logica)
- Restituisce 1 quando almeno uno dei due bit vale 1. Si usa per accendere, cioè impostare a 1, uno o più bit specifici senza alterare gli altri.
- XOR (disgiunzione esclusiva)
- Restituisce 1 soltanto quando i due bit differiscono fra loro. Trova impiego nell'inversione di valori, nello scambio di variabili e nel rilevamento delle differenze fra due sequenze di bit.
- NOT (negazione)
- Inverte tutti i bit di un singolo valore, trasformando ogni 0 in 1 e ogni 1 in 0. Il risultato dipende dall'ampiezza in bit scelta, perché cambia il numero di cifre su cui avviene l'inversione.
- Scorrimento (shift)
- Sposta l'intera sequenza di bit verso sinistra o verso destra di un certo numero di posizioni. Lo scorrimento a sinistra equivale a moltiplicare per una potenza di due, quello a destra a dividere per due.
- Maschera di bit (bitmask)
- Un valore che, combinato con AND o OR, permette di estrarre o modificare bit specifici. Per esempio `0b00001111` estrae i quattro bit meno significativi di un altro valore.
- Ampiezza in bit
- Il numero di cifre binarie usate per rappresentare un valore. Con 8 bit si rappresentano i numeri da 0 a 255, con 16 bit da 0 a 65535, e l'ampiezza scelta determina anche il comportamento di NOT e degli scorrimenti.
- Notazione binaria ed esadecimale
- La notazione binaria usa soltanto le cifre 0 e 1, mentre quella esadecimale usa le cifre da 0 a 9 e le lettere da A a F; l'esadecimale è spesso preferito come scrittura compatta di gruppi di quattro bit binari.
Domande frequenti
A proposito — le curiose proprietà dello XOR e i suoi impieghi pratici
Le operazioni sui bit corrispondono direttamente ai circuiti logici dell'elaboratore e sono le più elementari in assoluto: tanto rapide che il processore le esegue in un solo ciclo di clock. Poiché si realizzano con meccanismi assai più semplici delle quattro operazioni aritmetiche, là dove conta la prestazione — elaborazione delle immagini, crittografia, realizzazione dei protocolli di rete — da tempo si ricorre alla tecnica di sostituire moltiplicazioni e divisioni con operazioni sui bit equivalenti.
Lo XOR, la disgiunzione esclusiva, ha proprietà curiose: lo XOR di un valore con sé stesso dà sempre zero, cioè `a ^ a = 0`, e lo XOR con zero restituisce il valore originario, cioè `a ^ 0 = a`. Sfruttando queste due proprietà si ottiene lo scambio con XOR, tecnica classica che permette di invertire il contenuto di due variabili senza ricorrere a una variabile d'appoggio, con la sequenza `a ^= b; b ^= a; a ^= b;`. Oggi, per ragioni di leggibilità, se ne sconsiglia l'uso nel lavoro reale, ma resta un esempio spesso citato per imparare le proprietà delle operazioni sui bit.
Le maschere di bit hanno larghissimo impiego pratico. I permessi sui file di Unix — la combinazione di lettura, che vale quattro, scrittura, che vale due, ed esecuzione, che vale uno — non sono altro che OR e AND fra bit; e anche l'estrazione delle componenti rossa, verde e azzurra da un codice di colore come #FF0000 si ottiene combinando scorrimenti a destra e maschere AND. La tecnica dei contrassegni di bit, che raccoglie in un solo numero intero molti indicatori di acceso e spento, era del resto diffusissima nella programmazione dei vecchi videogiochi e sistemi, dove occorreva gestire molti stati con poca memoria.