Aritmetica in complemento a due 29 settembre 2017
Complemento a Due Differenza con il sistema posizionale: il peso del bit più significativo è negativo Il valore di b n-1 b n-2 b 0 è dato dalla relazione N 2 n 1 b n 1 n 2 i 0 2 i b i 00010010 = + 2 4 + 2= 18 10010010 = 2 7 + 2 4 + 2= 128+18 = 110 111111 = 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0 = 2 5 + 2 5 1= 1 111101= 2 5 + 2 4 + 2 3 + 2 2 + 2 0 = 32 + 29 = 3
Positivi e negativi Osservazione: Il bit più significativo ci indica il segno: 0 significa positivo 1 significa negativo Esercizio Dimostrare che nella rappresentazione b n-1 b n-2 b 0 in complemento a due dell intero N: Se b n-1 = 0 allora N 0 Se b n-1 = 1 allora N < 0
Perché «complemento a 2»? Sia B= b n-1 b n-2 b 0 Se B 0 allora b n-1 =0 e il valore di b n-2 b 0 è uguale a B. Se B<0 allora b n-1 =1 e il valore di b n-2 b 0 Cioè il complemento a 2 n-1 di B. è uguale a 2 n-1 - B. Esempio: n=4; B=1011=-5; 011=3 = 8-5
Intervallo di rappresentabilità Numeri rappresentabili con n bit in Complemento a 2 minimo: 1000 000 = 2 n-1 Massimo: 0111..111 = 2 n-1 1 [ 2 n-1, 2 n-1 1 ]
Esempio con n=4 bit 0 000 = 0 0 001 = +1 0 010 = +2 0 011 = +3 0 100 = +4 0 101 = +5 0 110 = +6 0 111 = +7 Massimo=+7 minimo = 8 1 000 = 8 1 001 = 8 +1= 7 1 010 = 8+2 = 6 1 011 = 8+3 = 5 1 100 = 8+4 = 4 1 101 = 8+5 = 3 1 110 = 8+6 = 2 1 111 = 8+7 = 1 Intervallo di rappresentazione con 4 bit: [ 8, +7]
Vantaggi Una sola rappresentazione per lo zero L aritmetica è semplice: l algoritmo per l addizione è indipendente dal segno degli operandi Cambiare di segno/ ottenere l opposto è ancora semplice. La rappresentazione in complemento a 2 di un intero negativo si può ottenere trovando la rappresentazione in complemento a 2 del suo valore assoluto e calcolando poi l opposto La sottrazione si può fare sommando al minuendo l opposto del sottraendo
Cambiamento di segno: algoritmo 1 Algoritmo 1: Si esegue il complemento bit a bit o negazione (si trasforma ogni 1 in 0 e viceversa) Si somma 1 Esempio: Con 6 bit: 3 10 = 000011 Si esegue il complemento bit a bit 111100+ Si somma +1 1= 111101 111101= 2 5 + 2 4 + 2 3 + 2 2 + 2 0 = 32 + 29 = 3 10
Cambiamento di segno: algoritmo 2 Algoritmo 2: Partendo da destra si lasciano invariati tutti i bit fino al primo 1 compreso, poi si invertono i rimanenti Esempio: 12 10 = 00001100 11110011+ 1= 11110100 11110100 = 10100 = 2 4 + 2 2 = 16 + 4 = 12 10
Estensione del segno Per i numeri positivi si aggiungono 0 nella parte più significativa +18 = 00010010 = 2 4 + 2= 18 +18 = 00000000 00010010 = 2 4 + 2= 18 Per i numeri negativi si aggiungono 1 nella parte più significativa -18 = 101110= -2 5 + 2 3 + 2 2 +2= -32 +14=-18-18 = 1111 101110 = -2 9 +(2 8 + + 2 5 ) + 2 3 + 2 2 +2 = = -2 9 +(2 9-2 5 ) + 2 3 + 2 2 +2 = -2 5 + 2 3 + 2 2 +2= -18 Regola dell estensione del segno: Si completa la rappresentazione riportando a sinistra il bit più significativo.
Addizione in complemento a 2 La somma in complemento a 2 si calcola come nel caso binario tranne che: Si trascura l eventuale bit di riporto finale (c n ) Si deve controllare la consistenza dei segni: se la somma di positivi è positiva o la somma di due negativi è negativa allora il risultato è corretto. Altrimenti l operazione non poteva essere fatta perché c è traboccamento/overflow: il risultato non è rappresentabile con quel numero di bit. Dimostrazione del caso generale: facoltativa ([P] par. 6.2)
Esempio 1 (n=6 bit): 12 + 6 12 = 001100 6 = 000110 X0 01100 001100 + 000110 = 010010 Corretto! 010010= 2 4 + 2=18 12+6=18 Esempi Esempio 2 (n=6 bit): 25 + ( 13) 25 = 011001 13 = 110011 X1 10011 011001 + 110011 = 001100 Corretto! 001100= 2 3 + 2 2 =12 25 + ( 13)=12
Esempio 3 (n=6 bit): 13 + 23 13 = 001101 23 = 010111 X0 11111 001101 + 010111 = 100100 Overflow! 100100 = 2 5 + 2 2 = 28 13+23=36 non rappresentabile con 6 bit Esempi n=6 intervallo rappresentabilità [-32, 31] Esempio 4 (n=6 bit): 13 + ( 23) 13 = 110011 23 = 101001 X1 00011 110011 + 101001 = 011100 Overflow! 011100= 2 4 + 2 3 + 2 2 =28 13 + ( 23) = 36 non rappresentabile con 6 bit
Sottrazione in complemento a 2 Sottrazione Si calcola l opposto del sottraendo e si somma al minuendo a - b = a + (-b) Avremo quindi bisogno dei soli circuiti di somma e negazione dei bit
Cosa cambia nell addizione in complemento a due? c n s n c n-1 c i c 2 a n-1 a i a 2 a 1 a 0 + b n-1 b i b 2 b 1 b 0 = s n-1 s i s 2 c 1 s 1 s 0 Il contributo di c n-1 è sempre +c n-1 2 n-1. In binario (puro) il contributo di a n-1 è +a n-1 2 n-1, quello di b n-1 è +b n-1 2 n-1 e quello di s n-1 è +s n-1 2 n-1. Invece, in complemento a due, il contributo di a n-1 è a n-1 2 n-1, quello di b n-1 è b n-1 2 n-1 e quello di s n-1 è s n-1 2 n-1.
Correttezza dell algoritmo ([P] 6.2, facoltativo) A= a n-1 a n-2 a 0, B= b n-1 b n-2 b 0, A+B= s n-1 s n-2 s 0 1. A 0, B 0: se A+B 2 n-1 (overflow), s n-1 =1 (somma negativa!); altrimenti corretto 2. A<0, B<0: se A+B < 2 n-1 (overflow), s n-1 =0 (somma positiva!); altrimenti corretto ignorando l n-esimo riporto 3. A 0, B<0 e A B : corretto ignorando l n-esimo riporto 4. A 0, B<0 e A < B : corretto
Caso 1: A 0, B 0, n=4 bit (facoltativo) c 4 c 3 c 2 a 3 a 2 a 1 a 0 + b 3 b 2 b 1 b 0 = s 3 s 2 c 1 s 1 c 0 s 0 A= a 3 a 2 a 1 a 0, B= b 3 b 2 b 1 b 0 a 3 = b 3 = 0 s 2 s 1 s 0 2 3 1 =7 Se c è overflow allora A+B 2 3 =8, quindi c 3 = 1, s 3 = 1, c 4 = 0 Il risultato è negativo: non è corretto in complemento a due! 0 1 1 0 0 1 1 0 + 0 0 1 1 = 1 0 0 1 6 + 3 = Se non c è overflow allora A+B 7 quindi c 3 = 0, s 3 = 0, c 4 = 0 Risultato corretto. 9 in binario, ma -7 in complemento a due
Caso 1: A 0, B 0 (facoltativo) c n c n-1 c n-2 c 1 a n-1 a n-2 a 1 a 0 + b n-1 b n-2 b 1 b 0 = A= a n-1 a n-2 a 0, B= b n-1 b n-2 b 0 a n-1 = b n-1 = 0 s n-2 s 0 2 n-1 1 s n-1 s n-2 s 1 s 0 Se c è overflow allora A+B 2 n-1 quindi c n-1 = 1, s n-1 = 1, c n = 0 Se non c è overflow allora A+B 2 n-1 1 quindi c n-1 = 0, s n-1 = 0, c n = 0
Caso 1: A 0, B 0, esempi Somma di positivi è negativa: traboccamento! Corretto!
Caso 2: A < 0, B < 0 (facoltativo) c n c n-1 c n-2 c 1 a n-1 a n-2 a 1 a 0 + b n-1 b n-2 b 1 b 0 = A= a n-1 a n-2 a 0, B= b n-1 b n-2 b 0 a n-1 = b n-1 = 1 0 s n-2 s 0 2 n-1 1 s n-1 s n-2 s 1 s 0 Se c è overflow allora A+B < 2 n-1 quindi c n-1 = 0, s n-1 = 0, c n = 1 Se non c è overflow allora A+B > 2 n-1 quindi c n-1 = 1, s n-1 = 1, c n = 1
Corretto: trascurando riporto! Caso 2: A < 0 B < 0 (es. 6.5 corretto) 1 0 0 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 0 0 Somma di negativi è positiva: traboccamento!
Casi 3 e 4: A 0, B<0, esempi 3 4 Corretto: trascurando riporto!
Regola alternativa per l overflow Dalle considerazioni fatte nei vari casi si ottiene un altra regola per determinare l overflow. Se c n-1 = c n il risultato è corretto. Si ha invece overflow ogni qual volta c n-1 c n
Sottrazione con la ALU Per eseguire A B, la ALU eseguirà A + ( B). A= a n-1 a n-2 a 1 a 0 e B= b n-1 b n-2 b 1 b 0 B= b n-1 b n-2 b 1 b 0 + 1 c n c n-1 a n-1 a n-2 a 1 a 0 + b n-1 b n-2 b 1 b 0 + 1 = s n-1 c n-2 s n-2 c 1 s 1 s 0 c n c n-1 a n-1 a n-2 a 1 a 0 + b n-1 b n-2 b 1 b 0 + s n-1 c n-2 s n-2 c 1 s 1 s 0 e poi controlla l overflow 1 c 0 =1
Esercizi da [PH]: 3.1 3.11 da [P]: 6.1 6.4
Esercizi Eseguire l operazione 5ED4 07A4 direttamente in esadecimale. Eseguire l operazione 5E24 07A4 direttamente in esadecimale. Eseguire l operazione 1011 0010 direttamente in binario. Eseguire l operazione 1100 1010 direttamente in binario. Eseguire l operazione 1100 1010 passando per la rappresentazione in complemento a due. Per ogni operazione è necessario giustificare le operazioni svolte e verificarne la correttezza esprimendo ogni numero in decimale.