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.

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.

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.

Articoli: Tempo/Numeri

Tempo Unix: perché i computer contano il tempo dal 1970

Perché il 1° gennaio 1970 è diventato il punto di riferimento del tempo per la maggior parte dei sistemi informatici.

Espressioni cron: come decifrare una pianificazione di attività

Come decifrare un'espressione come */15 * * * * e sapere esattamente quando verrà eseguita l'attività.

Sistemi numerici: a cosa servono binario, ottale ed esadecimale

Perché il colore #FF5733 in CSS è scritto con cifre esadecimali anziché decimali.

Differenza tra date: perché contare i giorni è più complicato di quanto sembri

Perché sottrarre date in modo ingenuo può dare un risultato sbagliato a causa degli anni bisestili.

Calcolo dell'età: perché non è una semplice sottrazione di anni

Perché sottrarre semplicemente gli anni di nascita può dare un'età superiore di uno rispetto a quella reale.

Fusi orari: perché UTC non è la stessa cosa di GMT

Perché UTC non cambia mai due volte all'anno, mentre l'ora di Londra (GMT/BST) sì.

Calcolatrice di durata: come sommare correttamente ore, minuti e secondi

Perché sommando minuti e secondi bisogna "riportare" il resto alla cifra successiva, come nella somma decimale.

ISO 8601 Duration: come scrivere una durata in formato standard

Perché PT1H30M significa «1 ora 30 minuti» e non «1 minuto 30 ore».

Numero di settimana: perché paesi diversi contano le settimane in modo diverso

Perché il 1° gennaio a volte appartiene alla settimana 52 o 53 dell'anno precedente secondo lo standard ISO 8601.

Numeri romani: come funziona un sistema senza zero né posizioni

Perché IV significa 4 e non 6, e come funziona la regola della sottrazione nei numeri romani.

IEEE 754: perché 0.1 + 0.2 non è uguale a 0.3 nel codice

Perché in quasi ogni linguaggio di programmazione 0.1 + 0.2 restituisce 0.30000000000000004.

Numero in lettere: perché trasformare cifre in parole

Perché nei documenti bancari l'importo viene scritto sia in cifre che in lettere contemporaneamente.