NAND, NOR, XNOR e il catalogo completo dei sette operatori booleani
Ripasso: i quattro Operatori fondamentali
Nella Lezione A2 abbiamo studiato i quattro operatori logici fondamentali. Prima di proseguire, richiamiamo le parole chiave di ciascuno, perché ci serviranno per costruire i nuovi operatori.
| Operatore | Parola chiave | L’output è VERO (1) quando… |
|---|---|---|
| NOT | Opposto | …l’input è FALSO (inverte il valore) |
| AND | Tutti | …tutti gli input sono VERI |
| OR | Almeno uno | …almeno un input è VERO |
| XOR | Diversi | …gli input sono diversi tra loro |
Ecco le tabelle di verità dei tre operatori a due input, che ci serviranno come punto di partenza.
AND
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
OR
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
XOR
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Teniamo queste tabelle a portata di mano: tra poco le useremo per costruire, in modo semplicissimo, i tre nuovi operatori.
Il Principio di Derivazione tramite Negazione
Sappiamo già che l’operatore NOT inverte un valore: trasforma ogni 0 in 1 e ogni 1 in 0. Questa proprietà ci permette di creare nuovi operatori a partire da quelli che già conosciamo, semplicemente applicando il NOT al risultato di un operatore esistente.
L’idea è molto semplice. Prendiamo un operatore che già conosciamo (per esempio AND), calcoliamo il suo risultato normalmente e poi applichiamo il NOT a quel risultato. Il risultato è un nuovo operatore il cui output è sempre l’opposto di quello dell’operatore originale: ogni 1 diventa 0 e ogni 0 diventa 1.
Definizione
Il principio di derivazione tramite negazione consiste nell’applicare l’operatore NOT al risultato di un operatore logico esistente, ottenendo un nuovo operatore il cui output è l’inverso esatto dell’originale. Il nome del nuovo operatore si forma aggiungendo la lettera «N» (che sta per NOT) davanti al nome dell’operatore base.
Applicando questo principio ai tre operatori a due input, otteniamo tre nuovi operatori:
NOT + AND ⟶ NAND
NOT + OR ⟶ NOR
NOT + XOR ⟶ XNOR
La «N» nel nome sta per «NOT»: NAND significa «NOT AND» (AND negato), NOR significa «NOT OR» (OR negato), XNOR significa «NOT XOR» (XOR negato), noto anche come operatore di equivalenza.
Trucco pratico
Per costruire la tabella di verità di un operatore derivato non serve imparare nulla di nuovo. Basta prendere la tabella dell’operatore base e invertire ogni valore della colonna del risultato: dove c’era 0, scrivi 1; dove c’era 1, scrivi 0. Se sai costruire le tabelle di AND, OR e XOR, sai già costruire anche quelle di NAND, NOR e XNOR.
Operatore NAND — il Prodotto logico negato
2 input ⟶ 1 output
L’operatore NAND è il risultato dell’applicazione del NOT all’output dell’AND. Il suo nome sta per NOT AND, cioè «AND negato». Siccome l’AND restituisce VERO solo quando tutti gli input sono veri, il NAND fa l’opposto: restituisce FALSO solo quando tutti gli input sono veri. In tutti gli altri casi, il NAND restituisce VERO.
Definizione
L’operatore NAND (NOT AND, prodotto logico negato) prende due o più valori booleani in input e restituisce VERO (1) quando almeno un input è FALSO (0). L’unico caso in cui il NAND restituisce FALSO (0) è quando tutti gli input sono VERI (1). In pratica: NAND = NOT(AND).
Come si costruisce la Tabella: dall’AND al NAND
| A | B | A AND B | NOT (A AND B) = NAND |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Tabella di Verità di NAND (versione finale)
| A | B | Y = A NAND B |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Un Trucco per ricordare NAND
Ricordate il «genitore severo» dell’AND, che dava il permesso solo se tutte le condizioni erano soddisfatte? Il NAND è un genitore ribelle: dice di no solo quando tutto è perfetto, e dice di sì in tutti gli altri casi. «Non puoi uscire SOLO SE hai fatto tutti i compiti E hai messo in ordine la stanza. In tutti gli altri casi… vai pure!»
Esempi dalla Vita quotidiana e dalla Tecnologia
| Situazione | Condizione A | Condizione B | Risultato (A NAND B) |
|---|---|---|---|
| Allarme di un sistema di sicurezza | Porta chiusa? | Finestra chiusa? | L’allarme scatta se almeno una è aperta |
| Avviso «batteria e dati in esaurimento» | Batteria sopra il 20%? | Dati mobili sopra il limite? | L’avviso compare se almeno una risorsa è in esaurimento |
| Controllo qualità in fabbrica | Pezzo con dimensioni corrette? | Pezzo con colore corretto? | Il pezzo viene scartato se almeno un controllo fallisce |
Per chi vuole saperne di più
Il NAND ha un’importanza speciale nell’elettronica digitale. È stato dimostrato che qualsiasi operazione logica può essere costruita usando esclusivamente porte NAND. Per questo motivo, il NAND è definito un operatore funzionalmente completo. Nella pratica, molti circuiti integrati sono costruiti prevalentemente con porte NAND perché sono economiche e versatili. La memoria del tuo smartphone — la tecnologia chiamata NAND Flash — prende il nome proprio da questo operatore.
Operatore NOR — la Somma logica negata
2 input ⟶ 1 output
L’operatore NOR è il risultato dell’applicazione del NOT all’output dell’OR. Il suo nome sta per NOT OR, cioè «OR negato». Siccome l’OR restituisce VERO quando almeno un input è vero, il NOR fa l’opposto: restituisce VERO solo quando tutti gli input sono falsi. Basta che anche uno solo sia vero perché il NOR restituisca FALSO.
Definizione
L’operatore NOR (NOT OR, somma logica negata) prende due o più valori booleani in input e restituisce VERO (1) solo quando tutti gli input sono FALSI (0). Se anche un solo input è VERO (1), il risultato è FALSO (0). In pratica: NOR = NOT(OR).
Come si costruisce la Tabella: dall’OR al NOR
| A | B | A OR B | NOT (A OR B) = NOR |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
Tabella di Verità di NOR (versione finale)
| A | B | Y = A NOR B |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
Un Trucco per ricordare NOR
Ricordate il «genitore permissivo» dell’OR, che diceva sì appena almeno una condizione era soddisfatta? Il NOR è un genitore iper-esigente: dice sì solo quando nessuna condizione è soddisfatta. È l’operatore più restrittivo: restituisce VERO in un solo caso su quattro, e proprio in quello dove tutto è «spento».
Esempi dalla Vita quotidiana e dalla Tecnologia
| Situazione | Condizione A | Condizione B | Risultato (A NOR B) |
|---|---|---|---|
| Indicatore «tutto tranquillo» di un sistema di monitoraggio | Allarme 1 attivo? | Allarme 2 attivo? | «Tutto tranquillo» solo se nessun allarme è attivo |
| Modalità risparmio energetico | Schermo acceso? | App in esecuzione in primo piano? | Risparmio energetico attivo solo se nessuna delle due è vera |
| Silenzio in biblioteca | Qualcuno sta parlando? | Un telefono sta suonando? | Il silenzio c’è solo se nessuna delle due è vera |
Per chi vuole saperne di più
Come il NAND, anche il NOR è un operatore funzionalmente completo: qualsiasi operazione logica può essere costruita usando solo porte NOR. Storicamente, l’Apollo Guidance Computer (AGC) — il computer di bordo delle missioni Apollo, lo stesso che nel 1969 guidò l’Apollo 11 verso la Luna — era costruito interamente con circa 5.600 porte NOR. La scelta cadde sul NOR perché, all’epoca, le porte NOR a circuito integrato erano tra i componenti più affidabili disponibili per l’industria aerospaziale.
Operatore XNOR — la Somma logica esclusiva negata
2 input ⟶ 1 output
L’operatore XNOR è il risultato dell’applicazione del NOT all’output dello XOR. Il suo nome sta per NOT XOR, cioè «XOR negato». Siccome lo XOR restituisce VERO quando gli input sono diversi, lo XNOR fa l’opposto: restituisce VERO quando gli input sono uguali tra loro.
Definizione
L’operatore XNOR (NOT XOR, somma logica esclusiva negata) prende due o più valori booleani in input e restituisce VERO (1) quando gli input hanno lo stesso valore (entrambi 0 oppure entrambi 1). Il risultato è FALSO (0) quando gli input sono diversi tra loro. In pratica: XNOR = NOT(XOR). Lo XNOR è anche noto come operatore di equivalenza.
Come si costruisce la Tabella: dallo XOR allo XNOR
| A | B | A XOR B | NOT (A XOR B) = XNOR |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Tabella di Verità di XNOR (versione finale)
| A | B | Y = A XNOR B |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Lo XNOR restituisce 1 quando i due input sono uguali (0 e 0, oppure 1 e 1). Questo è il motivo per cui viene chiamato anche operatore di equivalenza: verifica se due valori sono identici.
Un Trucco per ricordare XNOR
Pensate allo XNOR come a un controllore di uguaglianza. La domanda che si pone è: «Questi due valori sono uguali?» Se la risposta è sì (entrambi veri o entrambi falsi), il risultato è VERO. Se sono diversi, il risultato è FALSO. È lo XOR al contrario: dove lo XOR cercava la differenza, lo XNOR cerca l’uguaglianza.
Esempi dalla Vita quotidiana e dalla Tecnologia
| Situazione | Condizione A | Condizione B | Risultato (A XNOR B) |
|---|---|---|---|
| Verifica di una password | Carattere digitato dall’utente | Carattere salvato nel sistema | Corrispondenza confermata solo se i due caratteri sono uguali |
| Sincronizzazione di due orologi | Orologio A segna le 10:00? | Orologio B segna le 10:00? | Sincronizzati solo se mostrano la stessa ora |
| Verifica di un file copiato | Dimensione del file originale | Dimensione della copia | Copia riuscita solo se le dimensioni sono identiche |
| Risposta corretta in un quiz | Risposta data dallo studente | Risposta corretta registrata | Punto assegnato solo se le due risposte coincidono |
Confronto tra Operatori base e Operatori derivati
AND e NAND a confronto
| A | B | AND | NAND |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
OR e NOR a confronto
| A | B | OR | NOR |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
XOR e XNOR a confronto
| A | B | XOR | XNOR |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Il pattern è sempre lo stesso: riga per riga, dove l’operatore base ha 0 il derivato ha 1, e viceversa. Questo conferma il principio di derivazione: il derivato è semplicemente il NOT dell’originale.
Il Catalogo completo: tutti e sette gli Operatori
Schema riassuntivo dei sette Operatori
| Operatore | Tipo | Input | L’output è VERO (1) quando… | Parola chiave |
|---|---|---|---|---|
| NOT | Fondamentale | 1 | …l’input è FALSO | Opposto |
| AND | Fondamentale | 2+ | …tutti gli input sono VERI | Tutti |
| OR | Fondamentale | 2+ | …almeno un input è VERO | Almeno uno |
| XOR | Fondamentale | 2+ | …gli input sono diversi | Diversi |
| NAND | Derivato (NOT + AND) | 2+ | …almeno un input è FALSO | Non tutti |
| NOR | Derivato (NOT + OR) | 2+ | …tutti gli input sono FALSI | Nessuno |
| XNOR | Derivato (NOT + XOR) | 2+ | …gli input sono uguali | Uguali |
La Tabella di Verità completa di tutti e sette gli Operatori
Operatore NOT (1 input)
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
Tutti gli Operatori a 2 input
| A | B | AND | OR | XOR | NAND | NOR | XNOR |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
Osservazione importante
Guardate le colonne a coppie: AND e NAND sono una l’opposto dell’altra (dove uno ha 0, l’altro ha 1). Lo stesso vale per OR e NOR, e per XOR e XNOR. Questo conferma in modo visivo il principio di derivazione: ogni operatore derivato è semplicemente la versione «capovolta» del suo operatore base.
Attenzione
Non è necessario memorizzare a memoria tutte e sette le tabelle. Bastano quattro informazioni: le parole chiave degli operatori fondamentali (opposto, tutti, almeno uno, diversi) e la regola di derivazione (inverti il risultato). Con questi strumenti potete ricostruire qualsiasi tabella in pochi secondi.
Gli Operatori derivati nella Tecnologia
NAND e le Memorie dei nostri Dispositivi
La memoria del vostro smartphone, della chiavetta USB, della scheda SD della fotocamera e dell’SSD del computer è costruita con una tecnologia chiamata NAND Flash. Il nome non è una coincidenza: le celle di memoria che conservano i vostri dati sono organizzate secondo un’architettura che rispecchia la struttura logica dell’operatore NAND. Perché proprio il NAND? Perché, come abbiamo visto, è un operatore funzionalmente completo: da solo è sufficiente a realizzare qualsiasi operazione logica necessaria al funzionamento della memoria. Inoltre, la struttura NAND consente di impacchettare un altissimo numero di celle in uno spazio ridotto, il che si traduce in memorie di grande capacità a costi contenuti.
NOR e i Sistemi di Sicurezza
I sistemi di sicurezza usano spesso la logica NOR. Pensate a un impianto di allarme con diversi sensori (porte, finestre, movimento). Lo stato «tutto sicuro» corrisponde a un NOR: il sistema è in stato di sicurezza solo quando nessun sensore rileva anomalie. Basta che un solo sensore si attivi perché lo stato «tutto sicuro» diventi FALSO e scatti l’allarme. Esiste anche una memoria NOR Flash, più veloce in lettura rispetto alla NAND Flash: viene utilizzata per memorizzare il firmware (il programma di avvio) di molti dispositivi elettronici.
XNOR e il Confronto dei Dati
Lo XNOR è l’operatore ideale per confrontare dati. Quando il telefono verifica che il PIN che avete digitato corrisponde a quello salvato, sta effettuando un confronto bit per bit usando la logica XNOR: per ogni posizione, controlla se il bit digitato è uguale al bit salvato. Se tutti i confronti danno VERO (tutti uguali), il PIN è corretto e il telefono si sblocca. Se anche un solo confronto dà FALSO (un bit diverso), il PIN viene rifiutato. Lo stesso principio si applica quando il computer verifica che un file scaricato da Internet non sia stato danneggiato durante il trasferimento.
Esercizi di Verifica
Esercizio 1 — Costruisci le Tabelle derivate
Su un foglio, scrivi le tabelle di verità di AND, OR e XOR (dalla memoria, senza guardare la dispensa). Poi, per ciascuna, inverti la colonna dell’output per ottenere le tabelle di NAND, NOR e XNOR. Verifica il risultato confrontandolo con la tabella completa presente in questa lezione.
Esercizio 2 — Riconosci l’Operatore derivato
Per ciascuna delle seguenti situazioni, indica quale operatore derivato (NAND, NOR, XNOR) descrive meglio la regola applicata. Spiega brevemente il perché.
- Un sistema di controllo segnala «anomalia» se almeno uno dei due sensori non funziona correttamente.
- Un software di backup conferma che la copia è riuscita solo se il file originale e la copia sono identici.
- Un’applicazione di risparmio energetico attiva la modalità sleep solo quando nessuna attività è in corso (né download, né riproduzione video).
- Un sistema anti-spam blocca un’email se almeno uno dei due controlli (mittente sospetto, contenuto sospetto) risulta positivo — ma attenzione: la domanda è «quando l’email passa il filtro», cioè quando il risultato è «tutto ok».
- Un quiz online assegna il punto solo se la risposta dello studente coincide con la risposta corretta.
- Un distributore automatico accetta una moneta solo se nessun errore è stato rilevato (né inceppamento né serbatoio pieno).
Esercizio 3 — Calcola l’Output
Calcola il risultato (0 o 1) delle seguenti operazioni.
0 NAND 0= ?1 NAND 1= ?0 NOR 1= ?0 NOR 0= ?1 XNOR 1= ?1 XNOR 0= ?1 NAND 0= ?1 NOR 1= ?
Esercizio 4 — Da derivato a base
Per ciascuna delle seguenti espressioni con operatori derivati, riscrivila usando solo gli operatori fondamentali (NOT, AND, OR, XOR) e poi calcola il risultato. L’obiettivo è dimostrare che il risultato è lo stesso.
Esempio: 1 NAND 0 → NOT (1 AND 0) = NOT (0) = 1
0 NAND 01 NOR 01 XNOR 10 NOR 00 XNOR 11 NAND 1
Esercizio 5 — La Tabella misteriosa
Un compagno ti mostra una tabella di verità senza dirti quale operatore rappresenta. Dalla tabella, scopri di quale operatore si tratta.
Tabella A:
| A | B | Y |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
Tabella B:
| A | B | Y |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Tabella C:
| A | B | Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Per ciascuna tabella, indica il nome dell’operatore e spiega come sei arrivato alla risposta.
Esercizio 6 — Rispondi con parole tue
Rispondi alle seguenti domande scrivendo almeno tre righe per ciascuna risposta.
- Spiega con parole tue il principio di derivazione tramite negazione. Come si passa da un operatore fondamentale al suo derivato?
- Qual è la differenza tra NOR e AND? Entrambi restituiscono 1 in un solo caso su quattro: qual è questo caso per ciascuno e perché sono diversi?
- Perché lo XNOR viene chiamato anche «operatore di equivalenza»? Fai un esempio pratico.
Esercizio 7 — Gli Operatori derivati nel Codice
NAND, NOR e XNOR non hanno un operatore dedicato in PHP e JavaScript come li abbiamo studiati in forma teorica. Tuttavia, possiamo costruirli combinando gli operatori che già conosciamo, esattamente come abbiamo fatto con le tabelle di verità.
Osserva questo schema e completa gli esercizi che seguono:
<?php
$A = true;
$B = false;
// NAND = NOT(AND)
$nand = !($A && $B);
var_dump($nand); // Output: bool(true)
// NOR = NOT(OR)
$nor = !($A || $B);
var_dump($nor); // Output: bool(false)
// XNOR = NOT(XOR)
$xnor = !($A ^ $B);
var_dump($xnor); // Output: bool(false)
?>
let A = true;
let B = false;
// NAND = NOT(AND)
let nand = !(A && B);
console.log(nand); // Output: true
// NOR = NOT(OR)
let nor = !(A || B);
console.log(nor); // Output: false
// XNOR = NOT(XOR) — Boolean() converte il risultato in booleano esplicito
let xnor = !Boolean(A ^ B);
console.log(xnor); // Output: false
Ora svolgi i seguenti compiti.
- Modifica i valori di
$Ae$B(o diAeBin JavaScript) in modo da ottenere NAND = false. Quali valori hai usato? Perché il NAND restituisce false proprio in quel caso? - Scrivi in PHP e in JavaScript un’espressione che calcoli NOR tra tre variabili:
$A,$Be$C. Assegna tu stesso i valori e verifica che il risultato sia coerente con la tabella di verità. - Un sistema di autenticazione assegna un badge di accesso solo se il ruolo dell’utente corrisponde esattamente al ruolo richiesto dalla stanza (entrambi «amministratore» oppure entrambi «ospite», ma non combinazioni miste). Quale operatore derivato descrive questa logica? Scrivi il codice PHP corrispondente usando le variabili
$ruolo_utente_admine$stanza_richiede_admin.