SOMMA IN
MODULO E SEGNO
Sia
 n 1
X  x 0  2   xi 2  x 0  2  X
0
i
i 1
 n 1
0
Y  y0  2   yi 2  y0  2  Y
0
i
0
*
i 1
Caso a)
X e Y stesso segno (entrambi
positivi o negativi.
Si
esegue
la
moduli.
Risultato:
1
somma
dei
*
 n 1
Z  X  Y  z0  2   ( xi  yi )  2
0
i 1
z0  x0  y0
dove
(stesso
segno).
Esempio:
X  510  101012 e
Y  710  101112
-5
-7
-12
0101 +
0111 =
1100
Z = 11100
Se X  Y  2 , si ha overflow.
*
*
0
2
i
Caso b)
X e Y di segno discorde.
Sottocaso I) X  Y
*
*
Si deve eseguire X  Y
*
*
*
e il segno è quello di X .
3
Sottocaso II) X  Y
*
*
Si deve eseguire
Y  X  ( X  Y ) 
*
*
*
*
0( X Y ) 2 ( X Y )
*
*
1
*
*
*
e il segno è quello di Y .
NB: eseguendo
ottiene
borrow
X  Y ).
*
*
4
X Y
*
*
si
(perché
Conclusione per il caso b):
Se X e Y hanno segno
discorde, si esegue sempre
X  Y (modulo del primo *
*
modulo del secondo).
Se non c’è prestito, il risultato
è corretto e il segno è quello
del primo (cioè di X: z0  x0 ).
5
Se
c’è
occorre
prestito
(borrow)
calcolare
il
complemento a 2 del risultato e
il segno è l’opposto di quello
del primo (cioè z0  x 0 ).
Esempi:
a)
x  710  101112 e
y  510  001012
6
-7
+5
-2
0111 0101 =
0010
Non c’è borrow: il risultato è
corretto e il segno è quello del
primo addendo.
Risultato: z = 10010
7
b)
x  510  001012 e
y  710  101112
+5
-7
-2
0101 0111 =
1110
Si è verificato borrow: occorre
complementare a 2 il risultato
(0010), e il segno è l’opposto
del segno del primo addendo.
Risultato: z = 10010
8
In entrambi i casi: segni
discordi,
non
si
overflow.
9
ha
mai
SOMMA IN
COMPLEMENTO A 2
 Considerazioni preliminari:
1) Poiché
2
n
e
0
sono
n
congruenti modulo 2 ,
2  X e 0 X
n
forniscono lo stesso risultato (a
meno di un prestito finale, nel
secondo caso).
10
2) Sulla rappresentazione:
a) A  0
Il numero è espresso come
0  2  A , dove A  1
0
*
*
NB: Il numero ha un bit nella
parte intera:
0.a1a 2 a 3 ...a n1
11
b) A < 0
È
rappresentato
complemento
come
a
2
del
corrispondente positivo:
2 A
1
*
*
(dove A è il modulo
di A).
Ora
2  A  2 2  A
1
*
0
0
*
0
Il primo 2 è il bit 1 nel segno,
mentre
2 A
0
*
è
complemento a 2 su n-1 bit.
12
il
13
14
 Somma in complemento a 2
Caso a) X  0, Y  0
Segni uguali, positivi: occorre
che venga effettuata la somma
dei moduli e che il segno sia
positivo.
Eseguendo
la
somma
aritmetica su tutte le cifre,
segno compreso, si ottiene:
15
X  02  X
0
Y  02  Y
0
*
*
Z  X  Y  02  X  Y
0
*
*
Quindi correttamente si ottiene
la somma dei moduli e il segno
positivo.
NB: se X  Y  1., allora si ha
*
*
overflow: eseguendo la somma
si osserva che si “sporca” il bit
del segno.
16
Esempio:
+9
+4
+13
01001 +
00100 =
01101
Altro esempio (caso di
overflow):
+9
+8
+17
01001 +
01000 =
10001
Risultato negativo: errore per
overflow.
17
Caso b) X  0, Y < 0
Segni discordi: occorre che
venga effettuata la differenza
dei moduli e che il segno sia
quello
dell’addendo
con
modulo maggiore.
Eseguendo
la
somma
aritmetica
accade
proprio
questo.
18
Infatti:
X  02  X
0
Y  1 2  Y
0
*
*
Y  0Y ,
*
(dove
*
*
complemento a 2 di Y )
Z  X  Y  1 2  X  Y
0
19
*
*
Per il modulo:
X  Y  X  (0  Y ) 
*
X Y
*
*
*
*
*
come richiesto.
Per il segno:
X Y ,
*
sottocaso I)
*
cioè
modulo di X maggiore o
uguale al modulo di Y.
20
Allora:
Y X
*
*
per definizione di
complemento a 2.
Sommando ad ambo i membri
*
X si ottiene
Y X X X
*
*
*
Dalle
*
“considerazioni
preliminari”:
X  X  1000
. ...
*
*
21
Pertanto
Y  X 1
*
*
Ciò comporta che in
Z  1 2  X  Y
0
X Y
*
*
*
*
fornisca un risultato
pari a 1.xxx...
L’unità si va a sommare a
1  2 , dando così
0
1 2  0  2
1
22
0
Ora 1  2
1
cade fuori dalla
rappresentazione,
e
viene
scaricato;
0  2 cade nel bit del segno, e
0
corrisponde al valore atteso
(risultato positivo).
23
Conclusioni: se
X  Y , il
*
*
segno è + (come richiesto) e
c’è un riporto (carry) che deve
essere scaricato (cade fuori
dalla rappresentazione).
Esempio:
+9
-4
+5
01001 +
11100 =
100101

cade fuori dalla
rappresentazione e viene
scaricato
24
Sottocaso II) X  Y
*
*
Analogamente a prima
Y X
*
*
Y  X  X  X  1.
*
*
*
*
Quindi in
Z  1 2  X  Y
0
*
*
l’1 nel bit del segno non viene
modificato.
25
Conclusione:
il
risultato
è
negativo, come richiesto se
X Y .
*
*
Esempio:
+4
-9
-5
00100 +
10111 =
11011
26
Caso c) X < 0, Y > 0
Come caso b), scambiando X
con Y.
Caso d) X < 0, Y < 0
Segni uguali, negativi: occorre
che venga effettuata la somma
dei moduli e che il segno sia
negativo.
27
Eseguendo
la
somma
aritmetica si ottiene:
X  1 2  X
0
Y  1 2  Y
0
*
*
Z  X  Y  1 2  0  2  X  Y
1
dove 1  2
1
0
*
cade fuori dalla
rappresentazione
scaricato.
28
e
viene
*
Per il modulo:
dalla
definizione
di
complemento a 2
X Y  0 X 0Y 
*
*
*
*
0  (X  Y )
*
*
Pertanto, eseguendo la somma
aritmetica, si esegue di fatto la
somma tra i moduli, e la
rappresentazione che ne risulta
è quella del complemento a 2.
29
Per il segno:
affinché non ci sia overflow,
deve essere
X  Y 1
*
*
per cui deve anche essere
X  Y 1
*
*
Infatti:
0  (X  Y ) 
*
*
2  (X  Y ) 
1. xxx...
1
*
se X  Y  1
*
*
30
*
Quindi da
X  Y ( 1) si
*
*
genera un riporto (nel bit
precedente il segno) che va a
finire nel bit del segno, “aggiustandolo”. Il risultato è quindi
negativo, come richiesto.
NB: c’è anche il carry dopo il
bit
del
segno,
scaricato.
31
che
viene
Esempio:
-9
-4
-13
10111 +
11100 =
110011

cade fuori dalla
rappresentazione e viene
scaricato.
32
Altro esempio (caso di
overflow):
-9
-8
-17
10111 +
11000 =
101111

cade fuori dalla
rappresentazione e viene
scaricato.
Risultato positivo: errore per
overflow.
33
Le
stesse
considerazioni
valgono per numeri nella base
10 nella rappresentazione in
complemente a 10.
Esempi (rappresentazione su 3
cifre):
a)
+9
+4
+13
009 +
004 =
013
34
b)
+9
009 +
-4
996 =
+5
1005
L’1, cioè il carry, cade fuori
dalla rappresentazione e viene
scaricato.
NB: l’operazione eseguita è
9 + (1000 - 4) = 1000 + (9 - 4)
= 1000 + (5)

cade fuori dalla rappresentazione, viene scaricato
35
c)
-9
991 +
+4
004 =
-5
995
Il risultato è negativo (segno -),
il modulo vale il complemento
a 10 di 995.
Risultato: -5
NB: l’operazione eseguita è
(1000 - 9) + 4 = 1000 + (-9 +
4) = 1000 + (-5) = 995
non c’è riporto.
36
d)
-9
-4
-13
991 +
996 =
1987
L’1
cade
fuori
dalla
e
viene
rappresentazione
scaricato. Il risultato della
somma, 987, è negativo (segno
-);
il
modulo
vale
complemento a 10 di 987.
Risultato: -13
37
il
NB: l’operazione eseguita è
(1000 - 9) + (1000 - 4) =
1000 + (1000 - 13)

cade fuori dalla rappresentazione, viene scaricato
38