Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
D
I
Calcolatori
CL - Elettronica
Facoltà di Ingegneria
Università degli Studi di Firenze
Algebra di Boole e
Sistemi di Numerazione e
Ver.: 2.0
Data: 22/08/2003
Questo documento fa parte di una serie di dispense. Tali dispense sono state realizzate anche utilizzando
materiale prodotto da studenti e non sono state completamente ripulite da piccoli problemi. Si prega di
segnalare ogni mancanza e correzione inviando una mail al Prof. P. Nesi al seguente indirizzo di posta
elettronica con soggetto “dispense”: nesi@dsi.unifi.it.
2 Algebra di Boole...................................................................................................................................6
2.1 Gli operatori di confronto................................................................................................................................................................................................7
2.2 Gli operatori Booleani: AND, OR, NOT.................................................................................................................................................................7
2.2.1 Operatore AND.....................................................................................................................................................................................................7
2.2.2 Operatore OR..........................................................................................................................................................................................................8
2.2.3 Operatore NOT......................................................................................................................................................................................................8
2.2.4 And, Or, e NOT e i Circuiti................................................................................................................................................................................8
2.2.5 Implica e Coimplica.............................................................................................................................................................................................9
2.2.6 Proprietà degli operatori AND e OR............................................................................................................................................................9
2.3 Teoremi dell'Algebra di Boole...................................................................................................................................................................................10
2.4 Operazioni binarie su sequenze di bit......................................................................................................................................................................12
2.5 Sintesi, prodotti di somme e somme di prodotti..................................................................................................................................................13
2.6 Mascheratura AND e OR...........................................................................................................................................................................................14
2.7 Bit, Nibble, Bytes e Word............................................................................................................................................................................................14
3 Sistemi di Numerazione...................................................................................................................15
3.1 Sistemi di Numerazione Posizionali........................................................................................................................................................................15
3.1.1 Base generica b, numerazione posizionale................................................................................................................................................15
3.2 Rappresentazione dei Numeri Binari in Virgola Fissa.....................................................................................................................................16
3.2.1 Dinamica dei numeri Binari............................................................................................................................................................................17
3.2.2 Conversione da binario a decimale...............................................................................................................................................................17
3.2.3 Conversione da decimale a binario, parte intera.......................................................................................................................................17
3.2.4 Conversione da decimale a binario, parte frazionaria.............................................................................................................................18
3.2.5 Errore di Rappresentazione e Precisione.....................................................................................................................................................19
3.3 Operazioni fra numeri Binari,.....................................................................................................................................................................................22
3.3.1 Somma fra Binari................................................................................................................................................................................................22
3.3.2 Sottrazione fra Binari..........................................................................................................................................................................................22
3.3.3 Moltiplicazione fra Binari.................................................................................................................................................................................23
3.3.4 Divisione fra Binari.............................................................................................................................................................................................23
3.3.5 Scorrimento a destra e sinistra di numeri binari........................................................................................................................................24
3.4 Numeri Ottali....................................................................................................................................................................................................................24
3.4.1 Conversione da ottale a decimale..................................................................................................................................................................24
3.4.2 Conversione da numeri ottali a binari...........................................................................................................................................................25
3.5 Numeri Esadecimali......................................................................................................................................................................................................26
3.5.1 Conversione da decimale a esadecimale....................................................................................................................................................26
3.5.2 Conversioni tra numeri esadecimali e numeri binari..............................................................................................................................26
3.6 Forma complemento.....................................................................................................................................................................................................28
3.6.1 Complemento a b-1............................................................................................................................................................................................28
3.6.2 Proprietà e relazioni.............................................................................................................................................................................................29
3.6.3 Complementi Veloci..........................................................................................................................................................................................29
3.6.4 Sottrazioni con il complemento......................................................................................................................................................................30
CalcolatoriElettronici, parte1, versione 2.0, 2
4 Rappresentazione dei Dati..............................................................................................................32
4.1 Codifica dell'informazione...........................................................................................................................................................................................32
4.2 Codifica ASCII................................................................................................................................................................................................................32
4.3 Codifica BCD..................................................................................................................................................................................................................35
4.4 Confronto fra le varie rappresentazioni...................................................................................................................................................................36
4.5 Codifica dei Numeri Interi...........................................................................................................................................................................................36
4.5.1 Forma valore assoluto con segno..................................................................................................................................................................36
4.5.2 Rappresentazione complemento a 2............................................................................................................................................................37
4.5.3 Rappresentazione complemento a 1............................................................................................................................................................40
4.6 Codifica in Virgola Mobile.........................................................................................................................................................................................42
4.6.1 Richiami sulla rappresentazione in virgola fissa.......................................................................................................................................42
4.6.2 Codifica in virgola mobile................................................................................................................................................................................42
4.6.3 Rappresentazione reale corto...........................................................................................................................................................................43
4.6.4 Rappresentazione reale lungo.........................................................................................................................................................................43
4.6.5 Rappresentazione ‘ versione a 16 bit ‘..........................................................................................................................................................43
4.6.6 Rappresentazione della caratteristica............................................................................................................................................................44
4.6.7 Dinamica................................................................................................................................................................................................................44
4.6.8 Precisione................................................................................................................................................................................................................44
4.6.9 Errore assoluto......................................................................................................................................................................................................44
4.6.10 Errore relativo........................................................................................................................................................................................................45
4.6.11 Errore percentuale................................................................................................................................................................................................45
4.6.12 Esempio di calcolo dell’errore nella conversione di un numero........................................................................................................45
DATI RISULTATI
Algoritmo dell'esempio e' stato formalizzato con una notazione a voi nota, la notazione matematica.
ESEMPI di algoritmi:
Andare a fare la spesa
Il calcolo di un prodotto
Andare a iscriversi all'università
Istruzioni per il noleggio
Prelievo con bancomat
Fare una torta
Vediamo come puo’ essere strutturato un algoritmo riguardante la ricetta per cucinare una torta:
”Battere in una ciotola 100 g di burro fino a che non si ottiene una cremina. Aggiungere poco per volta
fino a 150 g di farina, 2 uova, 1pizzico di sale, 100g di zucchero e 250 g di latte ottenendo una pasta
piuttosto fluida. Versare l’impasto in una tortiera imburrata e mettere in forno a 180° per circa 1 ora”.
L’insieme di operazioni da compiere e’ rigorosamente ordinato (descritto dalla sequenza) e nel loro
insieme determinano una serie di azioni concrete da svolgere secondo determinate regole. Il risultato
finale, se tutti i passi sono stati eseguiti correttamente, e’ la torta, altrimenti viene prodotto qualcosa di
diverso…..
I programmi possono essere scritti in LINGUAGGIO MACCHINA o in linguaggi di alto livello, come
vedremo.
Per essere eseguibile un algoritmo deve essere codificato in un linguaggio comprensibile per chi lo
esegue. Gli elaboratori sono in grado di eseguire istruzioni se queste sono opportunamente codificate.
Un insieme di istruzioni ordinate secondo un certo schema che sono l'implementazione di un algorithmo
puo’ essere chiamato programma.
2 Algebra di Boole
I fondamenti dell’algebra Booleana sono stati delineati dal matematico inglese George BOOLE, nato a
Lincoln nel 1815 e morto nel 1864, in un lavoro pubblicato nel 1847 riguardante l’analisi della logica e in
particolare l’algebra della logica. Questa algebra include una serie di operazioni che si effettuano su delle
variabili logiche, dette appunto variabili Booleane: quantita’ che permettono di codificare le informazioni
su due soli livelli. Nell'algebra di Boole essendo, a differenza di quella tradizionale, un'algebra binaria, i
numeri possono assumere soltanto due stati, valori:
0/1;
v/f ( vero, falso);
l/h (low, high);
t/f (true, false);
on/off; (acceso/spento)
T,⊥ (true/false, vero/falso)
Su questi simboli si devono anche definire degli operatori e delle regole, che governano le operazioni, che
ci permettono di utilizzarli:
Una proposizione, e’ un costrutto linguistico, del quale si puo’ dire se e’ vero o falso, diventa un predicato
quando in essa compare una variabile e il valore delle variabili determina il valore di verita’ della
proposizione stessa. Valutare il predicato significa quindi eseguire quell’operazione che ci consente di
determinare la verita’ o la falsita’ del predicato stesso: i due valori “vero” o “falso” sono detti valori
logici. I predicati che contengono un solo operatore sono detti predicati semplici mentre quelli composti
sono caratterizzati dai simboli NOT, AND, OR.
E' chiaro che debbono manifestarsi contemporaneamente due condizioni per il funzionamento
dell'amplificatore:
Assegnando opportunamente alle variabili binarie i valori <0> e <1> si può scrivere:
E' possibile ora compilare una tabella, detta tabella della verità ,che descrive il valore del risultato
dell’operazione in funzione del valore degli operandi in cui compaiono tutte le 2n possibili configurazioni
delle variabili indipendenti, con n numero delle variabili.
A B A
^B
0 0 0
0 1 0
1 0 0
1 1 1
La tabella è in pieno accordo con l'equazione algebrica Y=A*B in quanto Y=1 (l'amplificatore funziona )
se e soltanto se A e B valgono 1 (c'è alimentazione e l'amplificatore è ben costruito).
A B AvB
0 0 0
0 1 1
1 0 1
1 1 1
A -A
0 1
1 0
X = not A
X=A or B X=A and B
A B
A
B
X
X
Il termine implica non significa che se A e’ vero (o falso) allora necessariamente B e’ vero (o falso)
come potrebbe lasciare intuire il significato comune del termine implica. Come e’ possibile vedere dalla
seguente tabella della verità A -> B e’ equivalente a -A or B.
A B -A -A or B
0 0 1 1
0 1 1 1
1 0 0 0
1 1 0 1
X significa don't care cioe' non ha importanza. Il suo valore non ha nessuna importanza ai fini della
produzione del risultato, il valore finale del risultati e’ invariante.
1) X+XY=X (assorbimento 1)
2) X+(-X)Y=X+Y (assorbimento 2)
3) XY+YZ+(-X)Z=XY+(-X)Z (assorbimento 3)
4) -(X+Y)=(-X)(-Y) DE MORGAN
Sono valide anche le duali
1) X(X+Y)=X
X+XY=X
-(X+XY)=(-X)
(-X)(-(XY))=(-X)
(-X)((-X)+(-Y))=(-X)
X(X+Y)=X
2) X((-X)+Y)=XY
X+(-X)Y=X+Y
(-X)+X(-Y)=-(X+Y)
(-X)(X+(-Y))=(-X)(-Y)
X((-X)+Y)=XY
3) (X+Y)(Y+Z)((-X)+Z)=(X+Y)((-X)+Z)
4) -(XY)=(-X)+(-Y)
Assorbimento 1) X+XY=X
L'assorbimento 1) si può dimostrare per esempio per mezzo della tabella della verita’:
X+XY = X
Si puo’ riscrivere come X(1+Y) = X ma 1+Y=1 che implica X=X
Assorbimento 2)X+(-X)Y=X+Y
X(X+(-X)Y) = XX+XY
XX+X(-X)Y = XX + XY
X = X+XY
come prima
Assorbimento 3)XY+YZ+(-X)Z=XY+(-X)Z
X Y -X -Y XY -(XY) (-X)+(-Y)
0 0 1 1 0 1 1
0 1 1 0 0 1 1
1 0 0 1 0 1 1
1 1 0 0 1 0 0
Come appare dal teorema di De Morgan e’ superflua la scelta delle funzioni OR,AND,NOT come
funzioni primitive: infatti l’operatore AND puo’ essere espresso in funzione delle operazioni OR e NOT;
analogamente l’operazione OR puo’ essere espressa tramite AND e NOT. Pertanto e’ facile verificare
come l’espressione A>= OR B<0 equivalga a NOT(A<0 AND B>=0 ).
Infatti basta ricordare il teorema nella forma –(X and Y)= (-X) or (-Y).
101101 and
010110=
-----------
000100
A B Y
0 0 1
0 1 0
1 0 0
1 1 1
Da questa tabella si puo’ derivare la forma algebrica di Y andando a scrivere i termini positivi (che sono
1) come prodotti di somme:
Le due forme sono equivalenti e lo si puo’ dimostrare con facili passaggi, utilizzando il teorema di De
Morgan:
(not A + B ) and (A + not B) = not A and A + not A and not B + B and A + B and not B
che dimostra l’equivalenza dei due modelli di sintesi. Dalle equazioni e’ facile passare al circuito che
vede:
A
B
Y
A
B
Ovviamente questa e’ un rappresentazione in termini di somme di prodotti ma lo stesso circuito poteva
essere realizzato con prodotti di somme. In tale caso si sarebbe utilizzato un AND e due OR e sempre due
not. In base al teorema di De Morgan, anche il circuito presentato poteva essere realizzato solo con AND
e NOT per esempio sostituendo l’OR con un AND con gli ingressi e le uscite negate.
L’operatore AND puo’ essere utilizzato per effettuare le cosidette “mascherature”:il metodo consiste nel sommare
ad numero qualsiasi, del quale voglio calcolare il valore di una sua certa cifra, un numero costituito da tutti 0,
tranne che in corrispondenza di quella determinata cifra. Ad esempio, se si desidera evidenziare la quarta cifra di un
numero si potra’ effettuare la seguente operazione di mascheratura dove il secondo numero (sequenza di bit) e’ la
maschera:
01101 110 AND
0000X000
_______________
0000X000
Se si ottiene un numero = a 0 allora la X =0, altrimenti se il numero e’ diverso da 0 X=1 e anche il bit in posizione
X nel numero originale era 1.
La maskeratura con l’operatore OR permette di riportare nel numero finale il valore dei bit di piu’ numeri. Nel caso
dell’esempio proposto, il primo numero presenta dei bit nulli mentre il secondo (la maschera) presenta dei bit XYZ
con dei valori precisi. L’operazione di OR permette di fare la fusione fra questi due numeri.
1 nibble = 4 bit
1 byte = 8 bit
1 word = 16 bit
1 doubleword = 32 bit
1 Kilobyte = 210 byte=1024 byte=8196 bit
1 Megabyte = 220 byte=1048576 byte~8 milioni bit
1 Gigabyte = 230 byte~ 1miliardo byte~8 miliardi bit
1 Terabyte = 2 40 byte~1012 byte~2 43 bit
Nelle cifre binarie il bit meno significativo e’ il primo a destra, questo viene chiamato LSB, Less
Significant Bit. Il bit piu’ significativo e’ quello più sinistra, che viene chiamato MSB, Most
Significant Bit.
es: 5b3+3b2+2b+4 per esempio dove b=10 base decimale in cui l’insieme delle cifre e’:
0,1,2,3,4,5,6,7,8,9. Si hanno unita', decine, centinaia, etc.
Usando per esempio il numero (yzq) l’espressione seguente yb2+zb+q con b=5 diventa :
y*25+z*5+q = 25+10+4=39
Ovviamente basi più piccole hanno potenza espressiva di rappresentazione minore. Cioe’, un numero che
ha N cifre in base B viene rappresentato con un numero minore o uguale di cifre da una base B1 piu’
grande di B.
dove il simbolo "." è detto punto di separazione o punto radice e separa tra di loro le parti intera e
frazionaria rappresentate la prima dalle n cifre Cn-1.....C0 e la seconda dalle m cifre C-1.....C -m.
In effetti i coefficienti C rappresentano solo la posizione del simbolo nella base ordinata e non il valore
della cifra. Questo risulta chiaro quando si realizzano basi con simboli e non con numeri ordinati.
1 103 + 2 102 + 4 10 + 6 in cui ad ogni posizione nella sequenza e’ associato un certo peso dato dalla
cifra che viene presentata nel numero stesso (dalla posizione che ha nella base tale simbolo della cifra).
Nel caso invece di numeri in base 5 con, ad esempio, il seguente sistema ordinato di cifre :[A,B,C,D,E],
l’insieme dei seguenti simboli E D D A corrispondono al numero decimale 590.
In decimale, 590, cioe’ tale numero intero rappresentato da EDDA si trova nella posizione 590 partendo
dall’origine dell’asse dei numeri naturali. Questo permette di effettuare semplici conversioni da qualsiasi
base alla base decimale.
Il sistema di numerazione binario si avvale di due simboli 0 e 1; ogni singola cifra di un numero binario
prende il nome di bit (binary digit):
∑2
n −1
k
= 2 n −1
h =0
Se ho ad esempio a disposizione 3 bit il piu’ grande numero rappresentabile e’ 7 perché 2*2+2+1=7, che
poi equivale a 2 alla terza meno 1.
Si e’ cosi’ introdotto il concetto di dinamica di rappresentazione che verrà ripreso piu’ accuratamente in
seguito.
5 4 3 2 1 0 -1 -2 -3
1 2 +0 2 +1 2 +0 2 +1 2 +1 2 +0 2 +1 2 +1 2 =
32 +8 +2 +1 +0.25 +0.125=
(43.375)10
Per la parte intera si utilizza il metodo delle divisioni successive; si divide il numero per 2 e il resto
rappresenta la cifra meno significativa in binario; si divide poi per 2 il quoziente ottenuto ed il resto
rappresenta la seconda cifra dal punto, radice e così si procede fino ad avere il quoziente zero
Dimostrazione: si vuole convertire il numero intero N in base 2, trovando quindi una forma polinomia
tale che:
n-2 n-3
e quindi il quoziente Q = an-1 2 +an-2 2 +.........+a1 mentre a0 e' il resto R. della prima divisione (e la
cifra meno significativa della forma polinomia). Dividendo ora Q nuovamente per 2 si ottiene un nuovo
quoziente Q1 e un nuovo resto R1:
Q/2=an-12n-3+an-22 n-4+……+a12 -1
Continuando a dividere per 2 i quozienti via via ottenuti, si arriva a determinare tutte le cifre binarie.
Per esempio, si vuole convertire in binario il numero 43,
resto
43 / 2 = 21 1 =a0
21 / 2 = 10 1 =a1
10 / 2 = 5 0 =a2
5/2= 2 1 =a3
2/2= 1 0 =a4
1/2= 0 1 =a5
segue che (43)10 = (101011)2 (Per la determinazione del numero binario i resti delle varie divisioni
vanno scritti nell’ordine inverso rispetto a come sono stati calcolati ).
Dimostrazione: si vuole convertire il numero frazionario F in base 2, trovando quindi una forma
polinomia tale che:
-1
F b = R + F' => F*2 = R + F' = a-1+a-2 2 +.........+a-m 2 -m+1
In cui a-1 rappresenta il valore della parte intera della moltiplicazione.
Moltiplicando adesso la parte frazionaria F1 si ottiene:
La maggior parte dei numeri frazionari non è rappresentabile in un numero finito di bit come
nell’esempio precedente. Pertanto può risultare necessario fissare a priori il numero massimo di
operazioni da eseguire e quindi i bit che si desidera avere nella rappresentazione o la precisione, che in
definitiva sono la stessa cosa.
(0.11100)2=(0.890625)10<(0.90)10
L’approssimazione per difetto del numero decimale dal quale siamo partiti, porta quindi a una condizione
di errore valutabile come
dall’esempio : ER=0.0104
dall’esempio: E%=1.04%
l’Errore Massimo dovuto all’approssimazione limitando il metodo dei prodotti successivi a k passaggi
è:
-K
Emax=2 che risulta essere l’indice di PRECISIONE nella rappresentazione del valore in questione.
-K
Dal momento che si trascura tutti gli addendi della forma polinomia da a-K*2 in poi sicuramente
-K
a-K-1*2 -K-1+ a-K-2*2 -K-2+ ........ <= a-K*2
Non si commettono errori quando nel procedimento delle moltiplicazioni successive si ottiene come
risultato un numero con la parte frazionaria nulla.
0.4375 * 2 = 0.875 0
0.875 * 2 =1.75 1
0.75 * 2 = 1.5 1
0.5 * 2 =1.0 1
Dato un numero finito N di bit con cui poter rappresentare in binario un numero intero è possibile
determinare il numero più grande rappresentabile. Se ad esempio dispongo di 5 bit, il numero massimo
rappresentabile è
4 3 2 1 0
(11111)2 che in forma polinomia è 1*2 +1*2 +1*2 +1*2 +1*2
Cioè si hanno 2^N combinazioni da 0 a 2^n -1. Il bit di peso massimo ha come peso 2^(n-1).
Viceversa dato un numero decimale D si può determinare il numero N di bit necessari per la
rappresentazione del corrispondente numero binario; N è il più piccolo intero tale che
N
2 -1>D
12
es. D=2073 N=log22074=12 2 =4096>2073
11 bit non sarebbero stati sufficienti perché il numero massimo rappresentabile con questi è
11
2 -1 = 2047 < 2073
Pertanto nella rappresentazione dei numeri in virgola fissa posso decidere quanti bits ho bisogno per la
parte intera (che dinamica ho nella rappresentazione ) e per la parte frazionaria ( che precisione ho nella
rappresentazione ).
2 alla n N 2 alla - n
1 0 1.0
2 1 0.5
4 2 0.25
8 3 0.125
16 4 0.0625
32 5 0.03125
64 6 0.015625
128 7 0.0078125
256 8 0.00390625
512 9 0.001953125
1024 10 0.0009765625
2048 11 0.00048828125
4096 12 0.000244140625
8192 13 0.0001220703125
16384 14 0.00006103515625
32768 15 0.000030517578125
65536 16 0.0000152587890625
131072 17 0.00000762939453125
262144 18 0.000003814697265625
524288 19 0.0000019073486328125
1048576 20 0.00000095367431640525
A B A+B Riporto
0 0 0 /
0 1 1 /
1 0 1 /
1 1 0 1
Il riporto nasce dal fatto che 1 + 1 =2 ma nel sistema binario non esiste il simbolo 2 e quindi occorre
riportare l’1 nella posizione seguente che ha valore 2. Percio’quando la somma é maggiore di 1, si deve
effettuare il riporto di 1 sulla cifra immediatamente a sinistra. Il riporto fa si che 1+1 produca un risultato
pari a 10 che in binario vale 2.
Per esempio si veda la seguente operazione di somma fra binari interi. In entrambe i casi il risultato e’ 64.
Prestito A B A-B
/ 0 0 0
1 0 1 1
/ 1 0 1
/ 1 1 0
Se il minuendo è minore del sottraendo la sottrazione si effettua con il prestito di 1 dalla cifra
immediatamente a sinistra ( se anche questa è uguale a 0 si scorre a sinistra fino alla prima cifra uguale a
1 ): effettuando il prestito al posto dell’1 prestato rimane lo 0.
10 0 10 10 Prestiti 0 1 1 10 1 1 1 10
1 0 1 1 0 1 1 0 1- 1 0 0 1 0 0 0 0-
1 0 0 0 1 0 1 1 0= 1 1 0 0 0 1=
0 0 1 0 1 0 1 1 1 1 0 1 1 1 1 1
1101 x 11.01
il risultato potra' essere diviso per 1101 in modo perfetto, cioe' potra' essere preso come dividendo.
Altrimenti il numero puo' risultare no divisibile e pertanto si puo' arrivare a un risultato che ha infinite
cifre dopo la virgola.
Prendiamo ad esempio il numero binario 10101101 che corrisponde al numero decimale 173;operare uno
scorrimento a sinistra significa trasferire tutti i bit del numero binario di un posto alla propria sinistra in
modo che il bit meno significativo diventi = a 0. Otteniamo cosi’ il numero 101011010 che corrisponde a
( 346 )10 : come possiamo facilmente notare il numero e’ stato semplicemente raddoppiato e percio’
possiamo affermare che lo SHL corrisponde ad una moltiplicazione per 2.Eseguendo “n” scorrimenti a
sinistra, eseguo “n” moltiplicazioni per 2 del numero in questione.
Al contrario lo SHR, che consiste nel far scorrere di un posto a destra ogni cifra del numero ,corrisponde
ad una divisione per 2.
0,1,2,3,4,5,6,7
nella forma polinomia il peso associato ad ogni cifra è una potenza dell’8; avremo quindi:
a n-1 *8n-1+an-2*8n-2+.........+a1*81+a0*80
Per la conversione inversa si utilizza il metodo delle divisioni successive, dividendo per 8 se si tratta di
un numero intero e moltiplicando per 8 ( metodo delle moltiplicazioni successive ) se si tratta di un
numero frazionario.
resto
5437 / 8 = 679 5 =a0
679 / 8 = 84 7 =a1
84 / 8 = 10 4 =a2
10 / 8 = 1 2 =a3
1 /8= 0 1 =a4
- 20 = 80 = 1
23 = 81 = 8 (le potenze dell’8 sono coefficienti della forma polinomia ottale)
26 = 82 = 64
- un coefficiente della forma polinomia ottale può essere espresso con 3 bit
per le conversioni tra numeri ottali e numeri binari si tenga presente la seguente tabella:
Ottale/Decimale Binario
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Es.
(1 5 3 7 )8
001 101 011 111
segue che (1537)8= (001/101/011/111)2
Es. di conversione da binario a ottale in cui il numero viene suddiviso a gruppi di tre cifre,da destra verso
sinistra,aggiungendo degli zeri nell’ultimo gruppo a destra se necessario e convertendo poi ciascun
gruppo di tre cifre binarie nella sua corrispondente cifra ottale.
Per la conversione della parte frazionaria, analogamente a quanto visto per la parte intera, si raggruppano
tre addendi alla volta partendo dalla cifra più significativa e spostandosi verso destra.
Es. (0.101/110/010)2=(0.562)8
Come possiamo facilmente notare dagli esempi,la rappresentazione ottale e’ piu’ compatta dal momento
che ad ogni cifra ottale corrispondono 3 bits:pertanto ogni numero ottale con “n” cifre rappresenta un
numero binario di 3”n” cifre.
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
(i codici A, B, C, D, E, F, corrispondono in decimale rispettivamente ai numeri 10, 11, 12, 13, 14, 15).
La forma polinomia esadecimale é la seguente:
1
a n-1 16n-1+a n-2 16 n-2+.........+a1 16 +a0
se ne deduce che ogni coefficiente esadecimale può essere espresso con 4 bit.
Per le conversioni tra numeri esadecimali e numeri binari si tenga presente la seguente tabella :
Esadecimale Binario decimale
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
Esempio di conversione da esadecimale a binario in cui ogni cifra viene convertita nel corrispondente
numero binario a quattro cifre:
(A D 5 F )16
1010 1101 0101 1111
(0110/0111/1001/1101)2
6 7 9 D
segue che(0110011110011101)2=(679D)16
Per la conversione della parte frazionaria, analogamente a quanto visto per la parte intera, si raggruppano
quattro addendi alla volta partendo dalla cifra più significativa e spostandosi verso destra.
es. (0.10110111101011)2=(0.B7AC)16
Cb − 1( N ) = bk − 1 − N
N + Cb − 1( N ) = b k − 1
k
Si nota che essendo b -N-1=Cb(N)-1, otteniamo C b-1(N)=Cb(N)-1
Si ricordi che il valore b k −1 è rappresentato, qualunque sia la base b, da k cifre tutte uguali a b −1
cioe' all'ultimo simbolo della base. Per esempio in base 10 a una serie di 9 ed in base 2 ad una serie di 1.
In tali basi si parla pertanto di complemento a 9 ed ad 1 rispettivamente.
3) Cb − 1(Cb − 1( N )) = N
Anche questo si dimostra nello stesso modo.
Complemento a 1 veloce:
-Il complemento a 1 di un numero binario si ottiene trasformando le cifre zero in uno e viceversa (che
equivale ad eseguire un’operazione not).
Cb − 1( N ) = (b k − 1) − N
Ricordiamoci che b k-1 equivale, in base 2, ad un numero costituito da k zeri; inoltre si nota come
l’operazione di sottrazione dalla cifra 1 equivalga ad un’operazione di not
Complemento a 2 veloce
Per calcolare più velocemente il complemento a 2 si puo’ utilizzare il seguente algoritmo:
Tutto ciò si può riassumere dicendo che il complemento a 2 di un binario si ottiene riscrivendo così come
sono tutti i bit del numero a partire da quello meno significativo fino al primo bit uguale a 1, compreso, e
eseguendo l’operazione not su tutti gli altri.
Es.:complemento a 2 veloce
N=01101100; C1(N)=10010011;
C2(N)=C1(N)+1=10010100 che rispecchia il caso in cui l’ultima cifra di (N) sia
zero (in questo caso l’ algoritmo di pagina 38 è stato percorso tre volte).
X − Y = X − Y + bk − bk =
= X + bk − Y −bk =
= X + Cb (Y ) − bk
CalcolatoriElettronici, parte1, versione 2.0, 30
Per esempio si supponga di effettuare la sottrazione tra numeri decimali 742 − 593 = 149
Questa differenza può essere calcolata come:
Ricordiamo che b k espresso in qualunque base è seguito da k zeri: perciò tale differenza si riduce al non
considerare il traboccamento.
con questo procedimento ho trasformato una sottrazione in una somma tra X e il complemento di Y. Ciò
permette di effettuare una differenza senza avere alcuna operazione di prestito.
11001100 +
00111110 =
traboccamento che verrà trascurato → 1| 00001010|
Trascurare la cifra più significativa equivale a sottrarre al risultato ottenuto bk in questo caso 28 ,cioè
(100000000)2
0 1 0 1 ENQ NAK % 5 E U e u
0 1 1 0 ACK SYN & 6 F V f v
0 1 1 1 BEL ETB ‘ 7 G W g w
1 0 0 0 BS CAN ( 8 H X h x
1 0 0 1 HT EM ) 9 I Y i y
1 0 1 0 LF SUB * : J Z j z
1 0 1 1 VT ESC + ; K [ k {
1 1 0 0 FF FS , < L \ l |
1 1 0 1 CR GS - = M ] m }
1 1 1 0 SO RS . > N ^ n ~
1 1 1 1 SI US / ? O _ o DEL
*** Si noti che le codifiche ASCII e EBCDIC sono utilizzate per rappresentare informazioni di
tipo alfanumerico. Anche le sequenze di cifre come “72” non sono dunque, come già detto,
numeri sui quali poter effettuare operazioni, ma semplici informazioni espresse da numeri, come
per esempio numeri telefonici. I numeri veri e propri si esprimono nelle forme già viste (valore
assoluto con segno, rappresentazione complemento a 1 e a 2).***
La codifica ASCII ad 8 bit e’ riportata nella seguente tabella dove il valore e’ riportato in decimale e
destra e’ disegnato il simbolo corrispondente della tastiera e dello schermo.
Tabella BCD
Cifra Codifica
Decimale BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
Es: somme con riporto
Vogliamo sommare 73 e 35;
73 in BCD 0111 0011 ; 35 in BCD 0011 0101;
7 3 3 5
0111 0011 +
0011 0101 =
1010 1000
Esempio: (4567)10 Vediamo quanto spazio occupa questa informazione numerica nelle varie
rappresentazioni:
K K
Per esempio Codifica con 8 bit
−(2 7 − 1), ,−0,+0, ,2 7 − 1
K
−127, ,−0,+0, ,127 K
Si riporta una tabella semplificativa 127 0111 1111
:
2 0000 0010
1 0000 0001
+0 0000 0000
-0 1000 0000
-1 1000 0001
-2 1000 0010
:
-127 1111 1111
Quindi è possibile rappresentare 255 numeri binari diversi (non 256 perché ho una doppia
rappresentazione dello zero: 0 0000000 e 1 0000000).
Ad esempio se si utilizzano 8 bit si ha che i pesi associati alle cifre del numero binario sono:
-128 64 32 16 8 4 2 1.
K K
−2 n − 1,−2 n − 1 + 1, ,0, ,2 n − 1 − 2,2 n − 1 − 1.
n-1
cioè una dinamica -2 <N< 2 n-1-1
in questo caso si andrebbe da -128 a 127.
2 0000 0010
1 0000 0001
0 0000 0000
-1 1111 1111
-2 1111 1110
-3 1111 1100
1) no carry no overflow
00100010 +
11010101 =
11110111
In questo caso non si ha né overflow né carry, e l’operazione risulta corretta.
In questo caso si hanno sia carry che overflow. Il risultato dell’operazione è corretto in quanto si è
ottenuto (in decimale): 34 − 11 = 23 . La cifra più significativa del risultato può essere trascurata
perché è il 10 k della definizione di complemento X − Y = X + C ( N ) − 2 (guarda paragrafo
k
2
3.7.4)
00100010 +
01110101 =
10010111
Si ha un carry senza overflow. L’elaboratore segnalerà la presenza del carry in quanto fornirà un risultato
dell’operazione non corretto. Infatti: 34+117= 151 che è fuori dalla dinamica dei numeri permessi.
L’elaboratore legge comunque il risultato. In questo caso risulterebbe: -128+16+4+2+1= --105
Qualunque combinazione degli 8 bit fornisce un “possibile risultato”. Infatti questa rappresentazione si
dice chiusa, ossia aggiungendo 1 al numero più grande, cioè 127, si riottiene –128,che è il più piccolo,
come se le 256 combinazioni formassero un unico collegamento chiuso.
Ritornando all’esempio occorre notare che se però successivamente si ha un’altra operazione (si parla di
operazioni in cascata) con un solo overflow allora si ritorna al caso precedente e quindi il risultato delle
due operazioni è corretto. Per esempio volendo eseguire l’operazione 103 + 90 − 70 = 123
all’interno dell’elaboratore si ha:
01100111 +
01011010 =
11000001
Il risultato dell’operazione 103 + 90 sarebbe dunque un numero negativo per la presenza del carry.
Sommando però −70 il risultato finale dell’operazione è corretto. L’overflow, infatti, ha compensato il
traboccamento.
10010111 +
10100001 =
1 00111000
Si ha un overflow senza carry, o anche overflow reale, quindi il risultato non è corretto.Infatti
−105 − 95 = −200 . L’elaboratore dunque segnalerà la presenza dell’overflow. Se però
successivamente si ha un’operazione con un solo carry il risultato tra le due operazioni è corretto come
nel caso precedente.
-127 64 32 16 8 4 2 1.
K K
Il rango dei numeri rappresentabili con n bit è:
− 2n − 1 + 1,−2n − 1 + 2, ,0, ,2n − 1 − 2,2n − 1 −1
dinamica +(2 n-1-1) , nel caso in cui n=8 avremo [-127;+127]
Adesso per cui si rappresentano 255 numeri; rispetto alla rappresentazione complemento a 2 si perde
infatti la combinazione 1111 1111 che prima significava -1, adesso invece rappresenta lo zero.
1 0000 0001
+0 0000 0000
-0 1111 1111
-1 1111 1110
Anche nel caso della forma complemento a 1 il bit di segno è trattato nello stesso modo degli altri bit
quindi si possono verificare carry e overflow.
Esempio.
11001010 +
11000101 =
1 10001111
In questo caso si hanno un carry e un overflow. Per ottenere il risultato corretto bisogna sommare alla
cifra meno significativa il valore dell’overflow cioè 10001111 + 1 = 10010000. Infatti si ottiene
−53 − 58 = −111. Questo metodo si chiama wrap around carry.
Infatti N-M corrisponde, utilizzando la rappresentazione complemento a 1, a
N-M= N+Cb-1(M)-bk+1
ma M=C b-1(M)-bk+1
1111 1111+
CalcolatoriElettronici, parte1, versione 2.0, 41
0000 0001=
1 0000 0000 Ma che cosa dice la regola?
Di togliere l’ overflow e di aggiungerlo alla cifra meno significativa ! Si ottiene in questo modo il
risultato corretto (0000 0001). Ciò è stato possibile perché si sono realizzati contemporaneamente sia un
carry che un overflow
E’ immediato notare come questo tipo di rappresentazione non sia unico; lo stesso numero 1150 può
avere infatti diverse rappresentazioni:
⇒
esempio:
0.02 x 10 - 7 0.2 x 10 -8
Per quanto riguarda le diverse forme di rappresentazione in virgola mobile, l’IEEE ( The Institute of
Electrical and Electronics Engineerings ) ha definito alcune ‘ forme ’ di rappresentazione che sono usate
da tutti gli elaboratori; esse differiscono tra loro solo per il numero di bit riservati alla rappresentazione
della mantissa e della caratteristica e hanno tutte la seguente forma generale:
S CARATTERISTICA MANTISSA
dove:
- s è un bit riservato segno che può essere 0 ( numero positivo ) o 1 ( numero negativo )
- la caratteristica è l’esponente ( del due nel caso binario ) del numero rappresentato
- la mantissa è la parte frazionaria ( ciò che è dopo lo 0. ) che, moltiplicata per 2 elevato alla caratteristica,
fornisce il numero cercato.
Di queste rappresentazioni ne vedremo alcune.
1 8 23
i bit sono numerati da 0 a 31 a partire da quello meno significativo cioè quello più a destra.
1 11 52
1 5 10
Vediamo adesso come si intende per 0 nel calcolatore, infatti ci sono due possibili ‘ zero ’:
- quello derivante da una operazione, come ad esempio 0.0 x 10 3 ; questo però può succedere ad esempio
per problemi legati alla cancellazione numerica derivante dalla sottrazione di due numeri molto vicini tra
loro
- 0.0 x 10 0 che è l’effettiva rappresentazione dello zero per il calcolatore.
C=E+t=E+(2K -1
-1 )
dove :
- C = caratteristica
- E = esponente in binario
- K = bit a disposizione per la rappresentazione della caratteristica
La forma di eccesso a t è usato per evitare l’uso di un bit di segno per la rappresentazione dell’esponente.
Consideriamo infatti K = 8 ( come nella forma di reale corto ):
4.6.7 Dinamica
Considerando sempre la rappresentazione reale corto si ha una dinamica pari a :
± 2 t + 1 = ± 2 128
4.6.8 Precisione
Per quanto riguarda la precisione, definita come il numero più piccolo rappresentabile, per la convenzione
del secondo zero risulta:
± 2 - t + 1 = ± 2- 126
Errore
Quando converto un numero in una rappresentazione in virgola mobile, se questo non è esattamente
esprimibile come somma di potenze del 2, commetto sempre una imprecisione valutabile in termini di
errore assoluto, relativo e percentuale.
L’errore nasce dalla finitezza della mantissa: se nel nostro caso disponiamo di 10 bit per la sua
rappresentazione vengono tagliate le ultime 2 cifre, ottenendo la rappresentazione del numero 3000.
Abbiamo, in particolare:
Ea = 3002 - 3000 = 2
ER = 2 / 3002 = 0.666* 10 - 3
E P = 0.0666 %
avendo per esempio 10 cifre di mantissa commettiamo un errore di 2481 cioè rappresentiamo il numero
3420160, abbiamo
quindi :
Ea = 3422641 - 3420160 = 2481
E P = 0.007 %
concludiamo quindi che al crescere del numero di cifre troncate l’errore assoluto cresce e in maniera non
lineare.
Nota: rappresentando il numero con una caratteristica limitata ( a 10 cifre nel nostro caso ), la parte che
viene troncata ( quella sottolineata in precedenza ) è proprio l’errore assoluto che si commette ( infatti
abbiamo troncato 100110110001 = 2481 = Ea ).
3 ) Supponiamo di voler convertire il numero 35.96
in questo caso, per quanto detto sopra, introdurremo un errore dovuto alla finitezza della caratteristica;
infatti:
Operando in questo modo, ciò che abbiamo rappresentato non è il numero 35.96 ma
Abbiamo così :
E P = 0.062 %