Materiale di approfondimento: numeri interi relativi in complemento a uno Federico Cerutti AA. 2011/2012 Modulo di Elementi di Informatica e Programmazione http://apollo.ing.unibs.it/fip/ 2011 Federico Cerutti <federico.cerutti@ing.unibs.it>
numeri positivi 2 n-1-1 01111111 +2 00000010 +1 00000001 00000000 +0 (2 n-1-1) 10000000 11111111 0 11111110 1 11111101 2 numeri negativi Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 2
Definizione Nella codifica in complemento a uno, i numeri positivi si codificano normalmente secondo la codifica binaria naturale, i numeri negativi come il complemento a uno del positivo corrispondente. Avendo a disposizione n bit per la rappresentazione dei numeri interi relativi, il complemento a uno di un numero binario N è definito come 2 n 1 N Esempio Con un codice a 8 bit il numero (+21) 10 è rappresentato da (00010101) 2, il numero ( 21) 10 da (11101010) 2. Il bit più significativo di un numero positivo è 0, quello di un numero negativo è 1. Il valore 0 ha due rappresentazioni distinte corrispondenti a +0 e 0, ovvero con un codice a 8 bit 00000000 e 11111111. Con un codice a n bit, i valori rappresentabili vanno da (2 n 1 1) a +(2 n 1 1). Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 3
Esempio Sia N = 10010100. Il complemento a uno di C 1 di N è: 11111111 C 1 = 10010100 = 01101011 REGOLA PRATICA EQUIVALENTE Si complementano (invertono) i valori di tutti i bit. N.B. Anche nel caso del complemento a uno valgono simmetria del complemento a uno e la regola sull estensione del segno. Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 4
Aritmetica in complemento a uno Addizione: l addizione di due numeri rappresentati in complemento a 1 dà il risultato corretto sommando al risultato ottenuto il riporto (a patto che il risultato sia entro il range dei numeri rappresentabili) Si ha overflow se i riporti generati nelle due posizioni più significative (tenendo conto anche di quelli generati nella somma del riporto!) sono diversi. In modo equivalente, si possono controllare i segni come nel caso del complemento a due. Sottrazione: per sottrarre un numero basta sommare il suo complemento a uno. Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 5
Aritmetica in complemento a uno: esempi Esempio Calcolare ( 99) 10 + ( 44) 10 con i numeri codificati in binario con complemento a uno con 8 bit (N.B. i numeri codificabili in complemento a uno con 8 bit appartengono all intervallo [ 127, 127]). (99) 10 (01100011) 2 ; ( 99) 10 (10011100) 2. (44) 10 (00101100) 2 ; ( 44) 10 (11010011) 2. 10011100 + 11100011 = (1) 01111111 + ( 99) 10 + ( 44) 10 00000001 = 10000000 11 (10000000) 2 = ( 01111111) 2 ( 127) 10. Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 6
Aritmetica in complemento a uno: esempi Esempio Calcolare ( 99) 10 + ( 54) 10 con i numeri codificati in binario con complemento a uno con 8 bit. (99) 10 (01100011) 2 ; ( 99) 10 (10011100) 2. (54) 10 (00110110) 2 ; ( 54) 10 (11001001) 2. 10011100 + 11001001 = (1) 01100101 + ( 99) 10 + ( 54) 10 00000001 = 01100110 10 (01100110) 2 (102) 10??? Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 7
Esercizio da appello Rappresentare i numeri 27 e 9 in complemento a uno con 8 bit e con 6 bit. Eseguire la somma in entrambe le rappresentazioni e commentare i rispettivi risultati. Soluzione A 6 bit (27) 10 (011011) 2 ; ( 27) 10 (100100) 2. (9) 10 (001001) 2 ; ( 9) 10 (110110) 2. ( 27) 10 + ( 9) 10 100100 + 110110 = (1) 011010 + 000001 = 011011 10 Ho overflow perché i riporti sono diversi (oppure: perché sommando due negativi ottengo un positivo). Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 8
Esercizio da appello Rappresentare i numeri 27 e 9 in complemento a uno con 8 bit e con 6 bit. Eseguire la somma in entrambe le rappresentazioni e commentare i rispettivi risultati. Soluzione A 8 bit I corrispettivi numeri a 8 bit li ottengo estendendo il segno: ( 27) 10 (11100100) 2 ; ( 9) 10 (11110110) 2. 11100100 + 11110110 = (1) 11011010 + ( 27) 10 + ( 9) 10 00000001 = 11011011 11 Non c è overflow perché i due riporti sono uguali. Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 9
Esercizio da appello Rappresentare i numeri decimali 65 e 18 in notazione binaria in complemento a uno con 8 bit. Eseguire la somma algebrica dei numeri così ottenuti e commentare il risultato. Soluzione (65) 10 = (01000001) 2 ; ( 65) 10 (10111110) 2. (18) 10 (00010010) 2. 10111110 + 00010010 = (0) 11010100 + ( 65) 10 + (18) 10 00000001 = 11010101 00 Non ho overflow perché i riporti sono uguali (non c è riporto in alcuna delle posizioni n e n 1). Infatti nella rappresentazione a complemento (sia esso complemento a uno o complemento a due) non è possibile ottenere l overflow sommando un numero positivo ed un numero negativo. Elementi di Informatica e Programmazione, A.A. 2011/12 Federico Cerutti 10