ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico...

54
ALGEBRA DI BOOLE L’algebra di Boole è un sistema algebrico sviluppato a metà dell’‘800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica aristotelica mediante una logica delle classi. Essa fu interpretata dallo stesso autore anche come una struttura di relazioni logiche tra proposizioni, mostrando così le affinità profonde esistenti tra la logica e l’usuale algebra.

Transcript of ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico...

Page 1: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

ALGEBRA DI BOOLE L’algebra di Boole è un sistema algebrico sviluppato a metà dell’‘800

dal matematico e logico inglese George Boole, per formalizzare la sillogistica aristotelica mediante una logica delle classi.

Essa fu interpretata dallo stesso autore anche come una struttura di relazioni logiche tra proposizioni, mostrando così le affinità profonde esistenti tra la logica e l’usuale algebra.

Page 2: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

L’algebra di Boole è rimasta pressoché ignorata per oltre 80 anni, cioè fino al 1937, quando lo scienziato americano Claude Elwood Shannon propose per primo di applicarla all’analisi e alla sintesi di circuiti a relè, che sono caratterizzati dai due stati di funzionamento “aperto” e “chiuso”.

Da allora l’algebra di Boole viene impiegata per la progettazione dei circuiti elettronici di tutti i computer.

Page 3: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

L’algebra booleana originaria era definita su un insieme costituito da due elementi (successivamente è stata generalizzata per insiemi costituiti da un numero di elementi uguale a una qualsiasi potenza del 2), che a seconda dei casi vengono chiamati vero, falso.

Per esempio, nel calcolo proposizionale si usano come elementi di partenza delle proposizioni semplici, a ciascuna delle quali si possa attribuire in modo univoco il valore di verità vero o falso.

Per esempio:

“5 è un numero dispari”

ha valore vero, mentre

“5 è un numero pari”

ha valore falso.

Page 4: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Una proposizione semplice suscettibile di assumere i due soli valori, vero o falso si dice variabile booleana o di commutazione.

Nel seguito indicheremo le variabili booleane con le lettere x, y, e i loro valori di verità con v, f *.

Unendo più proposizioni tramite nessi logici si formano proposizioni complesse, il cui valore di verità è ricavabile in maniera puramente formale dai valori delle proposizioni costituenti.

* Si consideri, in generale, la seguente tabella

Page 5: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Operatori AND (&&), OR (||), NOT (!)

Le operazioni più semplici che si possono compiere sulle proposizioni sono:

a) congiunzione, tramite il connettivo “e”. Esempio:

“5 è un numero dispari e 6 è un numero pari”

b) disgiunzione, tramite il connettivo “o”. Esempio:

“5 è un numero dispari o 6 è un numero pari”

c) negazione, tramite l’avverbio “non”. Esempio:

“5 non è un numero dispari”.

A queste operazioni corrispondono rispettivamente gli operatori booleani AND (&&), OR (||), NOT (!) così definiti:

Page 6: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

AND (&&) produce una variabile con valore v se e solo se collega due variabili entrambe con valore v, cioè:

f && f = ff && v = fv && f = fv && v = v

OR (||) produce una variabile con valore v se collega due variabili di cui una almeno abbia valore v, cioè:

f || f = ff || v = vv || f = vv || v = v

NOT (!) produce una variabile con valore v se anteposto a una variabile con valore f, e una con valore f se anteposto a una v, cioè:

!v = f!f = v

Page 7: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

In particolare,

•AND e OR collegano tra loro due variabili e sono detti perciò operatori binari o diadici;

•NOT opera su una sola variabile ed è detto perciò operatore unario o monadico.

Page 8: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

In esse le righe corrispondono a tutte le possibili combinazioni dei valori di verità delle variabili booleane, e le colonne corrispondono alle variabili booleane e al valore dell’espressione risultante.

Tabelle di verità

Nell’applicare l’algebra di Boole ai circuiti elettronici si sostituisce spesso il valore v con 1 e il valore f con 0. Perciò i tre operatori booleani visti in precedenza possono essere descritti anche con le seguenti tabelle di verità:

Page 9: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

1

2 3 4

S T

I due insiemi potrebbero rappresentare, rispettivamente:

• S l’insieme delle persone di questa aula con i capelli castani• T l’insieme delle persone di questa aula con gli occhi azzurri

Come si vede, le due ellissi dividono il piano in 4 regioni, numerate da 1 a 4:

In effetti, esiste una stretta somiglianza tra le tabelle di verità e i diagrammi di Venn impiegati nelle operazioni tra insiemi.

Per esempio, la figura seguente è un diagramma di Venn che mostra due insiemi, S e T, ognuno rappresentato da un’ellisse.

Page 10: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

1. la regione 1 rappresenta gli elementi che non appartengono né a S né a T, cioè le persone che non hanno né i capelli castani né gli occhi azzurri

1

2 3 4

S T

3. la regione 3 rappresenta l’intersezione () di S e T, cioè le persone con capelli castani e occhi azzurri

4. la regione 4 rappresenta la differenza T-S, cioè le persone che hanno gli occhi azzurri e non i capelli castani

5. le regioni 2, 3 e 4 rappresentano l’unione () di S e T, cioè le persone con capelli castani o con occhi azzurri.

2. la regione 2 rappresenta la differenza S-T, cioè le persone che hanno i capelli castani e non gli occhi azzurri

Page 11: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Perciò l’operazione di congiunzione (AND) sui valori di verità corrisponde alla intersezione () tra insiemi, la disgiunzione (OR) corrisponde alla unione e la negazione (NOT) alla complementazione (¯).

Page 12: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Gli operatori AND, OR, NOT godono di due importanti proprietà, note come teoremi di De Morgan:

che si possono dimostrare per esaustione, ossia scrivendo le tavole della verità dei due termini e osservando che sono uguali per tutte le possibili combinazioni dei valori assunti dalle variabili x, y.

Per esempio, per la prima si avrebbe:

Page 13: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Operatore OR esclusivo XOR (^)

L’operatore di disgiunzione OR necessita di alcuni chiarimenti, dato che la lingua italiana usa il connettivo “o” con due significati diversi.

Consideriamo come esempio le seguenti frasi:

a) “l’insalata si condisce con olio o con aceto”b) “verrò con il bus o con il tram”

nel caso a) il fatto di condire l’insalata con olio non esclude la possibilità di condirla con aceto, e la “o” ha un valore inclusivo;

nel caso b) una modalità di spostamento esclude l’altra, e la “o” ha valore esclusivo.

Per distinguere il caso a) dal caso b) è allora opportuno considerare, accanto all’operatore OR visto in precedenza - che d’ora in poi chiameremo, più propriamente, OR inclusivo - un operatore detto OR esclusivo o XOR, di simbolo ^, che produce una proposizione vera se una e soltanto una delle proposizioni che collega risulta vera.

Page 14: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Dato che produce il risultato 1 quando collega due variabili con valori di verità diversi, XOR è detto anche operatore di anticoincidenza.

La tavola di verità di XOR è pertanto la seguente:

Osservazione. Se confrontiamo la precedente tavola di verità dell’operatore XOR con quella dell’espressione

_ _x·y + x·y

che si ricava con la seguente tabella:

Page 15: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

che ci dice che:

XOR può essere sostituito connettendoin modo opportuno gli operatori AND, OR, NOT.

Pertanto XOR è un operatore composto.

vediamo che esse sono identiche. Vale pertanto l’identità:

Page 16: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Porte logiche

Come accennato, gran parte dell’importanza dell’algebra di Boole deriva dal fatto che essa trova applicazione nella teoria dei circuiti elettrici, in quanto è possibile realizzare dei dispositivi fisici abbastanza semplici che funzionano secondo le sue regole.

Tali dispositivi, che si chiamano porte logiche o gate, si potrebbero realizzare in linea di principio con dei semplici interruttori comandati da relé: ogni interruttore si trova normalmente nello stato di aperto (in cui cioè non fa passare corrente), e viene chiuso fornendo una tensione opportuna (di soglia) al proprio relè.

Page 17: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Infatti questo circuito fornisce in uscita la tensione 1 se e solo se entrambe le tensioni applicate ai due relè agli ingressi hanno valore 1 (e quindi fanno chiudere i corrispondenti interruttori).

In alternativa, si possono collegare due interruttori in parallelo con un generatore, ottenendosi l’equivalente dell’operatore OR. Infatti adesso sarà presente la tensione 1 in uscita se almeno una delle due tensioni in ingresso assume il valore 1.

L’interruttore è inserito in un circuito comprendente un generatore che eroga la stessa tensione; questa corrisponde alla variabile booleana 1 (o vero), mentre una tensione inferiore corrisponde alla variabile 0 (o falso).

Se colleghiamo due di questi interruttori in serie con il generatore otteniamo un circuito equivalente all’operatore AND.

Page 18: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Anche l’operatore XOR può essere realizzato con un semplice circuito, collegando due interruttori a due vie (o deviatori) a un generatore, come indicato in figura.

Se invece si realizza un interruttore che sia chiuso quando non si fornisce la tensione di soglia al suo relè, e aperto quando si fornisce tale tensione, esso costituisce l’equivalente dell’operatore NOT.

Si vede infatti che se gli stati dei due deviatori sono diversi (come in figura, dove quello di sinistra vale 0 e quello di destra 1) ai capi del circuito si verifica una tensione, in caso contrario no.

In maniera analoga si potrebbero realizzare con interruttori dei circuiti equivalenti agli operatori NAND e NOR che vedremo più avanti.

Page 19: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Di fatto, gli attuali computer utilizzano porte logiche costituite da transistori a effetto di campo a metallo-ossido semiconduttore (in inglese: Metal-Oxide Semiconductor Field Effect Transistor, o MOSFET).

Un transistore MOSFET può lavorare in tre modi: cut-off (funziona come un interruttore aperto), zona triodo (funziona come un resistore) e saturazione (funziona come un amplificatore).

Le porte sono realizzate in circuiti integrati, costruiti secondo una delle tecnologie pMOS, nMOS o cMOS.

La logica pMOS realizza circuiti nei quali la corrente è trasportata da “buche” o “vacanze di elettroni”, che si comportano come cariche elettriche positive. E’ la più economica, ma anche la più lenta delle tre.

La logica nMOS realizza circuiti nei quali la corrente è trasportata da elettroni. Sebbene sia semplice da progettare e realizzare, essa presenta alcuni seri svantaggi:

Page 20: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Per queste ragioni, durante gli anni ’80 la logica nMOS è stata sostituita dalla logica cMOS per realizzare circuiti digitali caratterizzati da bassa potenza e alta velocià (quali i micropocessori).

La logica cMOS utilizza come “mattoni” transistori MOSFET di tipo sia n sia p, complementando ogni nMOSFET con un pMOSFET e collegando lo stesso ingresso a entrambi.

In tal modo, quando un transistore conduce l’altro non conduce (idealmente), e quindi la corrente può scorrere solamente quando gli ingressi cambiano.

Per semplicità, in alcuni degli esempi che seguono, utilizzeremo comunque circuiti in logica nMOS e pMOS.

• una corrente continua fluisce attraverso un circuito logico nMOS anche quando esso è inattivo, il che dà luogo a un consumo di energia statico;

• un circuito nMOS è lento nel commutare tra gli stati alto e basso, ed è suscettibile a rumore elettrico.

Page 21: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

All’ossido si sovrappone uno strato di fotoresist, un materiale fotosensibile che esposto a luce ultravioletta diventa inattaccabile dai reagenti chimici utilizzati per rimuovere l’ossido.

Quindi si espone il fotoresist a luce ultravioletta, sovrapponendogli una maschera che contiene il disegno del primo strato del circuito. Il processo è analogo alla stampa di una fotografia da un negativo.

Produzione dei MOSFET. Accenniamo brevemente alla modalità di produzione dei circuiti MOSFET, sviluppata alla fine del 1958 dal fisico svizzero Jean A. Hoerni.

Sopra un disco sottilissimo di silicio levigato a specchio si fa crescere un film di ossido di silicio.

L’ossido costituisce una pellicola isolante che protegge la superficie del cristallo da qualsiasi contaminazione chimica, e in particolare impedisce alle sostanze successivamente immesse di penetrare nelle regioni del silicio che esso ricopre.

Page 22: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

A questo punto si sottopone il disco a tre bagni chimici successivi: il primo scioglie la parte di fotoresist non esposta alla luce;

Page 23: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

il secondo attacca l'ossido nelle zone non più protette dal fotoresist

e il terzo rimuove il fotoresist residuo, lasciando a nudo l’ossido e il silicio.

Per realizzare un circuito integrato planare il processo si ripete più volte, sovrapponendo ogni volta alle finestre appena realizzate un nuovo strato di ossido.

A questo punto si creano i transistori con un procedimento detto “drogaggio”, facendo penetrare nelle zone di silicio non coperte dall’ossido quantità infinitesime di elementi opportuni (in genere boro, fosforo o arsenico) detti “droganti”, e si rimuove l’ossido che ricopre la zona di separazione.

Page 24: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Nella zona scoperta si fa ricrescere uno strato di ossido più sottile, quindi si deposita su tutta la lastrina uno strato protettivo, nel quale si incidono due piccole finestre in corrispondenza delle regioni drogate.

Page 25: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Infine si deposita uno strato di metallo, solitamente alluminio, che viene inciso per ricavare l’elettrodo centrale del gate.

Come si vede, il prodotto finale è una piastrina in cui tutte le connessioni elettriche si trovano su una sola superficie del dispositivo, che perciò è detto planare, mentre la struttura interna è stratificata come quella di un sandwich.

Page 26: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Circuiti logici

Le funzioni dell’operatore AND possono essere svolte dal seguente circuito logico:

Il suo simbolo è:

Page 27: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Le funzioni dell’operatore OR possono essere svolte dal seguente circuito logico:

Il suo simbolo è:

Page 28: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Le funzioni dell’operatore NOT possono essere svolte dal seguente circuito logico, detto anche invertitore:

Il suo simbolo è:

Page 29: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Le funzioni dell'operatore XOR possono essere svolte dal seguente circuito logico in tecnologia nMOS:

Il suo simbolo è:

Page 30: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Sommatore binario

Se ricordiamo la tabella relativa alla somma di due bit, già vista

vediamo che la colonna del Riporto è l'AND dei due addendi, quella del Risultato è il loro XOR.

Quindi, per sommare tra loro due bit possiamo usare questi due circuiti logici, ottenendo il seguente circuito, detto semisommatore):

Page 31: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Per costruire un circuito sommatore completo, che realizzi la tavola di verità con tre ingressi e due uscite già vista in precedenza

eseguiamo due operazioni preliminari:

Page 32: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

1. sommiamo y e Ripprec, e consideriamo la sola colonna Risultato

2. eseguiamo l’XOR tra la colonna appena trovata e x: otteniamo proprio la colonna Risultato.

Page 33: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Inoltre, il Ripatt vale 1 se almeno due degli ingressi valgono 1. Ciò suggerisce che possiamo usare due semisommatori:

• il primo somma x e y e produce una somma parziale;

• il secondo somma a questa somma parziale Ripprec per produrre il Risultato finale.

Se uno o l’altro dei due semisommatori produce un riporto, vi sarà un riporto in uscita. Così Ripatt sarà una funzione OR delle uscite Riporto del semisommatore.

Il circuito sommatore completo risultante è indicato in figura.

Page 34: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Dato che il circuito precedente è piuttosto complicato per essere usato in diagrammi logici di grandi dimensioni, il sommatore binario viene rappresentato con un apposito simbolo:

Esso è in grado di sommare due bit, oltre a un eventuale riporto dall’ordine di grandezza immediatamente inferiore, e inviare un riporto all’ordine di grandezza immediatamente superiore.

Per sommare due numeri costituiti da più bit, si deve utilizzare un sommatore completo per ogni coppia di bit da sommare.

Page 35: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Così, per sommare due numeri da 4 bit ciascuno, e produrre una somma da 4 bit (con un eventuale riporto), servono 4 sommatori completi, con le linee di riporto collegate in cascata, come mostra la figura.

Page 36: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Operatore NOR

Si può poi definire l’operatore NOT OR, o NOR, come negazione dell’OR, cioè

x NOR y = NOT (x OR y)

In base a questa definizione, NOR ha la seguente tavola di verità:

Esso quindi produce una proposizione vera se e solo se collega due proposizioni entrambe false.

Page 37: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Anche NOR è un operatore composto, nel senso che può essere sostituito da operatori semplici. Infatti dalla sua definizione si ha:

_____x NOR y = x + y

mentre, per la seconda legge di De Morgan,_____ _ _x + y = x · y

Come esempio si può considerare la proposizione:

“si sta bene se non si ha fame o sete”

nella quale si accetta solamente il caso che le due proposizioni componenti siano entrambe false.

Page 38: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Operatore NAND

Si può poi definire l’operatore di incompatibilità NOT AND, o NAND, come negazione dell’AND, cioè

x NAND y = NOT (x AND y)

In base alla sua definizione, NAND ha la seguente tavola di verità:

Esso quindi:• produce una proposizione falsa se e solo se collega due proposizioni

entrambe vere, oppure: • produce una proposizione vera se collega due proposizioni di cui una

almeno sia falsa.

Page 39: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Come esempio si può considerare la frase:

“a tavola la persona educata non mangia e parla”

nella quale si esclude solo il caso che le due proposizioni componenti siano entrambe vere (la persona educata non mangia mentre parla), ma non quelli che siano entrambe o una sola false (la persona educata può non mangiare e/o non parlare).

Page 40: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Le funzioni dell’operatore NAND possono essere svolte dal seguente circuito in tecnologia cMOS:

o, in forma equivalente,

Il suo simbolo è:

Page 41: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

La figura a lato mostra il tracciato fisico del precedente circuito NAND in tecnologia cMOS.

Page 42: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Anche NAND è un operatore composto, ossia può essere sostituito da operatori semplici. Infatti dalla sua definizione si ha:

mentre, dalla prima legge di De Morgan,

Quindi si può sostituire un NAND con un OR e due NOT.

Circuiti universali. I circuiti NAND e NOR godono della seguente, interessante proprietà:

Qualsiasi circuito logico si può realizzare con unaopportuna combinazione di soli circuiti NAND oppure

di soli circuiti NOR, che pertanto sono detti circuiti universali.

Ci limitiamo a mostrare ciò per il circuito NAND che, essendo in pratica il più economico da produrre, risulta perciò particolarmente interessante.

Page 43: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

x AND y equivale a (x NAND y) NAND (x NAND y)

x OR y equivale a (x NAND x) NAND (q NAND y)

quindi equivale a

NOT x equivale a x NAND x

quindi equivale a

quindi equivale a

Page 44: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Il circuito XOR si può ottenere con la seguente disposizione di quattro circuiti NAND:

Il circuito NOR si può ottenere con la seguente disposizione di quattro circuiti NAND:

Page 45: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Operatori logici orientati al bit (bitwise)

Le operazioni booleane viste in precedenza si possono eseguire, oltre che su variabili logiche, anche sui singoli bit che costituiscono il valore di una costante o di una variabile.

Per manipolare i singoli bit il C usa gli operatori indicati in tabella.

Page 46: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

AND bit a bit (&). Esegue un confronto bit a bit tra due operandi. Il risultato di ogni confronto tra due bit è 1 se e solo se i bit confrontati sono entrambi 1, altrimenti è 0.

Per esempio, supponiamo di eseguire l’AND bit a bit tra

Se convertiamo i numeri precedenti nei loro equivalenti decimali, la precedente operazione si può riscrivere, in modo apparentemente bizzarro, come

179 & 213 = 145

Page 47: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

L’operazione AND bit a bit è molto utile per mascherare o eliminare dei bit selezionati da un operando.

Ciò è una conseguenza diretta del fatto che l’AND di qualsiasi bit con “0” produce come risultato il bit “0”, mentre l’AND di qualsiasi bit con “1” lascia il bit inalterato.

Perciò, se eseguiamo l’AND bit a bit di una configurazione generica di bit - che indichiamo con xxxxxxxx - con un “filtro” costituito dal numero binario 00001111, otteniamo la situazione seguente:

Page 48: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Quindi si può dire che, a seguito dell’operazione AND bit a bit,

• gli 0 mascherano, o bloccano, i bit di un operando, mentre• gli 1 lasciano passare i bit di un operando.

Page 49: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

OR inclusivo bit a bit (|). Esegue un confronto bit a bit tra due operandi, producendo 1 se almeno uno di essi vale 1, altrimenti producendo 0.

È molto utile per forzare dei bit selezionati ad assumere il valore 1 o per lasciarne altri invariati.

Ciò è conseguenza del fatto che:

• l’OR inclusivo di qualsiasi bit con 1 forza come risultato il bit 1, mentre

• l’OR inclusivo di qualsiasi bit con 0 lascia invariato il bit di partenza.

Come prima, supponiamo di eseguire l’OR inclusivo bit a bit di una generica configurazione di bit - che indichiamo con xxxxxxxx - con il “filtro” 11110000.

La situazione risultante sarà la seguente:

Page 50: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Osserviamo che:l’OR inclusivo con 0 ha lo stesso effetto dell’AND con 1.

Page 51: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

OR esclusivo bit a bit (^). Esegue un confronto bit a bit tra due operandi, producendo 1 se uno e uno solo di essi vale 1, altrimenti producendo 0.

È molto utile per creare l’opposto, o complemento, di tutti i singoli bit di una variabile, in conseguenza del fatto che:

- l’OR esclusivo di qualsiasi bit con 1 forza un risultato che è l’opposto o il complemento del bit di partenza, mentre

- l’OR esclusivo di qualsiasi bit con 0 lascia inalterato il bit di partenza.

Page 52: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Perciò l’OR esclusivo della generica configurazione di bit xxxxxxxx con il “filtro” 00001111 produce la situazione seguente:

Page 53: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Spostamento a sinistra (<<). L’operatore di spostamento a sinistra << fa sì che i bit di un operando siano spostati a sinistra di un numero indicato di posizioni.

Ad esempio, l’istruzione:

operando = operando << 4

sposta a sinistra di quattro posizioni i bit di operando, riempiendo le posizioni lasciate vuote con “0”.

Se, ad esempio, operando fosse il numero 11001111, si avrebbe:

Page 54: ALGEBRA DI BOOLE Lalgebra di Boole è un sistema algebrico sviluppato a metà dell800 dal matematico e logico inglese George Boole, per formalizzare la sillogistica.

Spostamento a destra (>>). L’operatore di spostamento a destra >> fa spostare a destra di un numero indicato di posizioni i bit di un operando.

Ad esempio, l’istruzione

operando = operando >> 3

sposta a destra di tre posizioni i bit di operando.

Se operando vale sempre 11001111 come prima, la situazione è indicata in figura dove, come si vede, a causa dello spostamento i tre bit più a destra di operando vengono “persi”.