Conversione di base Conversione decimale ⇒ binario

Conversione di base
Dato
•
•
•
N>0 intero convertirlo in base b
dividiamo N per b, otteniamo un quoto Q0 ed un resto R0
dividiamo Q0 per b, otteniamo un quoto Q1 ed un resto R1
ripetiamo finché Qn < b
N=Q0b+R0
sostituendo avremo:
Q0=Q1b+R1
N = Qnbn+1 + Rnbn + Rn-1bn-1 + … + R1b +R0b0
Q1=Q2b+R2
e quindi N nella base b è:
.............................
QnRnRn-1 ........R1R0
Qn-1=Qnb+Rn
Conversione decimale ⇒ binario
Si calcolano i resti delle divisioni per due
18
9
4
2
:
:
:
:
2
2
2
2
=
=
=
=
9
4
2
1
resto
resto
resto
resto
10010
0
1
0
0
137
68
34
17
8
4
2
:
:
:
:
:
:
:
2
2
2
2
2
2
2
=
=
=
=
=
=
=
68
34
17
8
4
2
1
resto
resto
resto
resto
resto
resto
resto
1
0
0
1
0
0
0
10001001
1
Conversione decimale ⇒
binario
conversione in base binaria di 123 decimale
123
61
30
15
7
3
:2
:2
:2
:2
:2
:2
61
30
15
7
3
1
resto 1
resto 1
resto 0
resto 1
resto 1
resto 1
12310 = 11110112
Conversione decimale ⇒ ottale
conversione in base ottale di 10268 decimale
10268
1283
160
20
:8
:8
:8
:8
1283
160
20
2
resto 4
resto 3
resto 0
resto 4
1026810 = 240348
2
Conversione binario ⇒ decimale
5
101100due = 1dieci×2dieci
+ 0dieci×24dieci+ 1dieci×23dieci+ 1dieci×22dieci+ 0dieci×21dieci+
+ 0dieci×20dieci =
= 1dieci×32dieci + 0dieci×16dieci + 1dieci×8dieci + 1dieci×4dieci+ 0dieci×2dieci
+ 0dieci×1dieci =
= 32dieci + 8dieci + 4dieci =
= 44dieci
101110101due = 1dieci×28dieci+ 0dieci×27dieci+ 1dieci×26dieci+ 1dieci×25dieci+ 1dieci×24dieci+
0dieci×23dieci+ 1dieci×22dieci+ 0dieci×21dieci+ 1dieci×20dieci =
= 1dieci×256dieci+ 0dieci×128dieci+ 1dieci×64dieci+ 1dieci×32dieci+
1dieci×16dieci+ 0dieci×8dieci+ 1dieci×4dieci+ 0dieci×2dieci+ 1dieci×1dieci =
= 256dieci+ 64dieci+ 32dieci+ 16dieci+ 4dieci+ 1dieci =
= 373dieci
Notazione posizionale per i
frazionari
Per i numeri con la frazione il meccanismo è lo stesso
vengono usate posizioni e potenze negative della base
Se scriviamo un numero frazionario in base b
c (n- 1) c (n- 2) .. c 2 c1 c 0 . c -1 c -2 c -3 … c
dove ogni cifra in posizione i viene indicata con c
-m
i
Una cifra in posizione i di un numero in base b ha peso ci · b
; quindi, il valore del numero è la somma dei pesi di ogni
cifra:
n −1
i
−m
X = ∑ Ci ⋅ b + ∑ C i ⋅ b i
i
i =0
i = −1
3
Notazione posizionale per i
frazionari
Quindi per la rappresentazione di 853.43 si ha che:
– c 2 =8, c 1 =5 , c 0 =3
– c -1 =4, c -2 =3
• Essendo composta da n= 3 cifre intere e da m= 2
cifre decimali il suo valore è:
n −1
−m
X = ∑ Ci ⋅ b + ∑ C i ⋅ b i
i
i =1
i = −1
c2 ·102 + c1 · 101 + c0 · 100 + c-1 · 10-1 + c-2 · 10-2 =
8 · 102 + 5 · 101 + 3 · 100+ 4 · 10-1 + 3 · 10-2
Conversione decimale ⇒ binario per i
numeri con parte frazionaria
Procedimento che a partire da una frazione F<1
– Ottiene la rappresentazione di F in binario (o una sua
approssimazione)
Sequenza ripetuta di moltiplicazioni per 2
„
„
„
„
„
Si ottiene una parte intera (che può essere 0 o 1) ed una parte
decimale F1
La parte intera rappresenta il bit più significativo, mentre F1
viene moltiplicato per 2
Si ottiene una parte intera (che può essere 0 o 1) ed una parte
decimale F2
La parte intera rappresenta il secondo bit più significativo,
mentre F2 viene moltiplicato per 2
… fino a quando Fi è uguale e 0 oppure decidiamo di fermarci….
4
Conversione decimale ⇒ binario per i
numeri con parte frazionaria
Esempio: conversione in binario di 0.81
Parte intera 0 . 1 1 0 0 1 1
0.
0.
0.
0.
0.
0.
81
62
24
48
96
92
·
·
·
·
·
·
2
2
2
2
2
2
=
=
=
=
=
=
1.
1.
0.
0.
1.
1.
62
24
48
96
92
84
1
1
0
0
1
1
Alcuni commenti …
• Il processo di conversione di una frazione non
necessariamente termina
• Una frazione decimale con un numero finito di cifre
può essere rappresentata con un numero infinito di cifre
binarie
– possiamo terminare il procedimento quando
riteniamo di aver raggiunto una precisione desiderata
5
Esempio: conversione parte
frazionaria
conversione di 0.73 con 8 bit
0.73·2=1.46
1 cifra più significativa
0.46·2=0.92
0
0.92·2=1.84
1
0.84·2=1.68
1
0.68·2=1.36
1
0.36·2=0.72
0
0.72·2=1.44
1
0.44·2=0.88
0 cifra meno significativa
…quindi (0.73) = (0.10111010)
con 8 bit rappresentiamo il numero 0.7265625
Casi particolari di conversione
B1 -------> B2
B1 = B2k
Caso in cui la base di partenza è una potenza di ordine k
della base di arrivo
B2 = B1k
Caso in cui la base di arrivo è una potenza di ordine k
della base di partenza
6
B1 = B2k
B1 --------> B2
Bisogna rappresentare ogni cifra della
rappresentazione in base B1 nelle
corrispondenti k cifre della
rappresentazione in base B2
B1 = 8; B2 = 2
k = 3 infatti 8 = 23
Ogni cifra in base B1 può essere rappresentata in base B2 con 3
cifre
Esempio
728 ------> rappresentazione in base 2?
7 28
111
010
2
B2 = B1k
B1 ----------------> B2
B1 = 2
Raggruppare a k a k le cifre della
k=3
rappresentazione in base B1 e convertirle
in una sola cifra in base B2
B2 = 8
1101112 ------> rappresentazione in base 8?
110 1112
VV
6
78
7
… altro esempio
101112 ------> rappresentazione in base 8?
010 1112
VV
2
78
aggiungere uno 0 per ogni cifra mancante a
sinistra (cifre più significative)
Overflow e underflow
overflow: tentativo di rappresentare un numero esterno
all’intervallo
–
Impossibilità di rappresentare il numero
Utilizzando la numerazione posizionale in base 2 un numero M
espresso su n bit potrà assumere valori compresi tre 0 ≤ M ≤2n-1
underflow: un numero x ≠ 0 viene rappresentato da y = 0
–
ovviamente ha senso solo nel caso in cui X è un intervallo
di numeri reali, rappresentati da Y (intervallo finito) con
un’approssimazione ε
8
Aritmetica dei numeri naturali
• Algoritmi classici per la realizzazione delle operazioni
aritmetiche (noti dalle elementari)
• le regole sono le stesse per tutti i sistemi di
numerazione posizionali (non solo quello decimale):
–
–
–
per addizione e sottrazione numeri in colonna e riporto …,
per moltiplicazione e divisione uso di tavole pitagoriche
per le singole cifre …
un esempio ...
1 1 0 0 riporti
4987 +
3232
8219
Addizione in binario
La somma di due numeri naturali espressi nel sistema binario
viene eseguita con le stesse modalità del sistema decimale
Si dispongono i due numeri in colonna e si sommano tra loro le
cifre (bit) di ogni colonna, partendo dalla meno significativa
(ovvero da destra), e ricordando quanto vale la somma e il
riporto di ciascuna coppia di cifre binarie:
Tabella di addizione
Ri
Ai Bi Si
0 0 0
0
0 1 1
0
1 0 1
0
1 1 0
1
Ai+Bi = Si
Ri = Carry o Riporto
9
esempio
1
riporto
1
1
1
1
1
1
1
0
1
0
1
0
0
1
0
0
1
0
+
Sottrazione in binario
La sottrazione di due numeri naturali rappresentati in
base due viene eseguita (analogamente a quanto
avviene in base dieci) incolonnando i numeri e
sottraendo tra loro le cifre in ogni colonna, partendo
dalla meno significativa (ovvero quella più a destra),
e ricordando quanto vale la sottrazione ed il prestito
di ciascuna coppia di cifre binarie
Tabella della sottrazione
Ai
0
0
1
1
Bi = Borrow o Prestito
Bi Si
0 0
1 1
0 1
1 0
Ai-Bi = Si
Bi
0
1
0
0
10
esempio
1
1
0
1
1
0
1
1
0
0
1
0
1
-
borrow
Overflow
Nel caso in cui si abbia un numero limitato di bit a
disposizione , si possono avere due casi particolari
di errore:
ƒ Carry sul bit più significativo;
ƒ Borrow dal bit più significativo.
In entrambi i casi il numero di bit fissato non è
sufficiente per rappresentare il risultato.
Tale condizione si dice di overflow.
11
Esempio di overflow
Considerando i numeri binari di 4 bit,
effettuare la somma 9 + 7.
910=10012
710=01112
1
riporto
1
1
0
0
1
0
1
1
1
0
0
0
0
+
Il risultato non è rappresentabile su 4 bit,
quindi si ha overflow
Esempio di overflow
Considerando i numeri binari di 4 bit,
effettuare la sottrazione 5 - 7.
510=01012
710=01112
1
borrow
0
1
0
1
0
1
1
1
1
1
1
0
-
Il risultato non è rappresentabile su 4 bit,
quindi si ha overflow
12
Operazione di scalamento a sinistra
Uno scalamento a sinistra di un numero binario
equivale ad una moltiplicazione per 2.
00101101
01011010
Inserito uno 0 in fondo
Uno scalamento di N posizioni a sinistra equivale a
moltiplicare il numero binario per 2N .
Scalamento a destra
Uno scalamento a destra di un numero binario
equivale ad una divisione per 2.
00101101
00010110
Inserito uno 0 in cima
Scalamento a destra
Uno scalamento di N posizioni a destra equivale a
dividere il numero binario per 2N .
13
Definizioni: numerali e numeri
Un numerale è solo una stringa di cifre
Un numerale rappresenta un numero solo se si
specifica un sistema di numerazione
Lo stesso numerale rappresenta diversi numeri
in diverse notazioni
Esempio
La stringa 110100 rappresenta:
– Centodiecimilacento in base 10
– 52 in base 2
– Un numero dell’ordine di vari milioni in base 16
Interi positivi e negativi
Finora abbiamo considerato solamente la
rappresentazione dei numeri positivi
Si utilizzano varie rappresentazioni per gli interi
relativi
„ Modulo e segno
„ Complemento a 1
„ Complemento a 2
„ …
Per rappresentare gli interi relativi, a parità di cifre
si dimezza l’intervallo dei valori assoluti
14
Rappresentazione con modulo e segno
Per rappresentare un numero con segno, si usa:
ƒ
ƒ
un bit per il segno: 0 per +, 1 per –
n-1 bit per il modulo
Intervallo di rappresentazione: [-2
n-1
+1, +2
n-1
-1]
Esempio
n=4 bit intervallo [-7,+7]
5 = 0101 -5 = 1101
Osservazioni
– Intervallo di rappresentazione simmetrico
– Problema: doppia rappresentazione dello zero (nel caso di
8 bit 10000000 e 00000000)
– Ulteriore problema: addizione e sottrazione complicata da
segno dei numeri, modulo dei numeri
Conversione da MS a numero
relativo
Per effettuare la conversione si scorpora il numero in due
parti:
„ Il bit più significativo è decodificato come segno
„ Gli N-1 bit meno significativi sono decodificati
come valore assoluto del numero relativo
15
Esempio
Convertire nei corrispondenti numeri relativi le seguenti
rappresentazioni modulo e segno:
„ 10100
„ 01110.
10100:
1: bit di segno = numero negativo
0100: valore assoluto = 4
Il numero relativo corrispondente è -4
01110:
0: bit di segno = numero positivo
1110: valore assoluto = 14
Il numero relativo corrispondente vale +14.
... vantaggi e svantaggi
• vantaggio: coincide con la nostra usuale
rappresentazione
• svantaggio: richiede il trattamento separato di
segno e modulo: algoritmi aritmetici più
pesanti ...
... nei calcolatori, per ovviare agli svantaggi
dell’aritmetica della rappresentazione in segno
e modulo, si adottano altre rappresentazioni
...
16
Rappresentazione in
complemento alla base
Nella rappresentazione in complemento
alla base si dà una diversa attribuzione
dei pesi associati alle cifre che codificano
il numero:
„ Alla cifra più alta è associato un peso negativo
„ Le cifre più basse hanno un peso positivo
Rappresentazione in complemento a 1
Si aggiunge uno 0 a sinistra alla rappresentazione dei numeri
positivi
Per cambiare di segno si complementa il numerale bit a bit
• I numerali positivi iniziano per 0, i negativi per 1
• Intervallo di rappresentazione con n bit: [-2 n-1 +1, +2 n-1 1]
• È una notazione posizionale:
Pesi delle cifre: (-2 n-1 +1) 2 n-2 ... 2 1 2 0
Esempio
n=4 bit intervallo di rappresentazione [-7, +7]
5 = 0101
-5 = 1010 (-7+2)
Complementare = cambiare segno
Doppia rappresentazione dello 0
17
Rappresentazione in complemento a 2
I numeri positivi hanno la stessa rappresentazione che in
complemento a 1
I negativi si ottengono sommando 1 alla loro rappresentazione in
complemento a 1
Intervallo di rappresentazione con n bit: [-2 n-1 , +2 n-1 -1]
Pesi delle cifre: -2 n-1 2 n-2 ... 2 1 2 0
Consideriamo il numero espresso in base 2
x(n-1)x(n-2) …x0
• Il bit più significativo xn-1 assume peso negativo –2 n-1
• Quindi, il valore di un numero N espresso in complemento a 2 è
n−2
N = − x( n −1) 2 n −1 + ∑ xi 2i
i =0
Intervallo più esteso ma
asimmetrico una sola
rappresentazione dello 0
Rappresentazione in complemento a 2
Esempio:
n=4 bit intervallo [-8, +7]
510=0101c2
-510 = 1011C2 (-8+2+1)
Prima regola pratica per complementare (calcolare la
rappresentazione di -X a partire da quella di X):
Effettuare il complemento di ogni bit di X ed aggiungere 1
Esempio (4 bit)
+610=0110C2
Complemento di tutti i bit: 1001
Aggiungere 1: 1001+1 = 1010 C2 = -6
10
Seconda regola pratica per complementare:
Partendo da destra si lasciano invariati tutti i bit fino al primo 1
compreso, e poi si complementa bit a bit
- Gli ultimi 2 bit rimangono invariati: __10
- Complementare gli altri 2 bit: 1010 C2 = -6 10
18
Conversione decimale-binario (CP1 e
CP2)
Abbiamo già visto come fare se il numero X è positivo. Se il numero X è
negativo:
negativo:
– Determinare il numero minimo di bit da usare (nmin )
– Convertire il numero positivo corrispondente in notazione a nmin bit
– Complementare (a 1 o 2) il numerale così ottenuto
Esempio: convertire ((-347)10 in CP2
2 8 = 256 < 347 < 512 = 2 9
intervallo con n bit: [[-2 n-1 ,+2 n-1 -1]
pertanto n min =10
+347 in notazione a 10 bit:
-512 256 128 64 32 16 8 4 2 1
0
1
0 1 0 1 1 0 1 1 In alternativa per CP2:
complementando a 2:
• Si converte in binario 2 n-1 +X
- 512 256 128 64 32 16 8 4 2 1 • Si mette il bit più significativo a 1
1
0
1 0 1 0 0101
• Perché?
-1·2
n-1
+ (2
n-1
+X) = X
19