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)10 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 Eccesso Per rappresentare gli interi relativi, a parità di cifre si dimezza l’intervallo dei valori assoluti 9 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 M&S a numero relativo Per effettuare la conversione si scorpora il numero in due parti: Il bit più significativo è decodificato come segno Gli NN-1 bit meno significativi sono decodificati come valore assoluto del numero relativo 10 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 ... 11 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: 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 12 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] n 1 n 2 1 0 Pesi delle cifre: -2 2 ... 2 2 Consideriamo il numero espresso in base 2 x(n(n-1)x(n(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 è 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 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 13 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 0101011011 complementando a 2: - 512 256 128 64 32 16 8 4 2 1 1010100101 In alternativa per CP2: • Si converte in binario 2 n-1 +X • Si mette il bit più significativo a 1 • Perché? -1·2 n-1 + (2 n-1 +X) = X Somma in complemento a due Dati due numeri X e Y in complemento a due su N bit, la somma X+Y si calcola sommando aritmeticamente tutti i bit degli addendi, compreso quello di segno. segno. L’eventuale carry oltre il bit di segno viene tralasciato. 14 Esempio Calcolare -( 7) + 10 in complemento a due su 5 bit. - 7= 11001 10 = 01010 1 11001+ 01010 00011 Tralasciando il carry, carry, il risultato vale 00011 = +3. Differenza in complemento a due Si può procedere in due modi: Ci si riconduce al caso della somma trasformando la differenza nella somma del primo numero con l’opposto del secondo. Si esegue la differenza usando la stessa tecnica utilizzata per la codifica in binario puro, sottraendo aritmeticamente tutti i bit degli addendi, compreso quello di segno. 15 Esempio Calcolare ((-7) - 4 in complemento a due su 5 bit. Si opera come se l’operazione fosse ((-7) + ((-4). -7 = 11001 -4 = 11100 1 11001+ 11100 10101 Tralasciando il carry, il risultato vale 10101 = -11. Overflow in complemento a 2 Si può verificare un overflow nell’operazione tra due numeri in complemento a due quando si effettua la somma di due numeri concordi o la differenza tra due numeri discordi. Si ha overflow quando il segno del risultato è diverso dal segno dei due addendi. 16 Esempio di overflow Calcolare (-12) + (-6) in complemento a due su 5 bit: (-12) = 10100 (-6) = 11010 1 10100+ 11010 01110 Si ha carry oltre il bit di segno, che viene ignorato. Il bit di segno è diverso da quello degli addendi, dunque la somma ha prodotto overflow. 17 Rappresentazione eccesso-k • • • • • • • La rappresentazione in eccesso-k costituisce un metodo diverso da quello dei resti in modulo per ricondurre i numeri negativi a positivi. In particolare, tutti i numeri sono traslati verso l’alto di k, che viene scelto maggiore o uguale al numero più piccolo da rappresentare: X=r(x)=x+k. Analogamente al caso dei complementi diminuiti, la somma va corretta aggiungendo o sottraendo la costante k, e quindi in maniera sufficientemente semplice. Le moltiplicazioni e le divisioni risultano invece più complesse . Il vantaggio di tale codifica è che viene conservata la proprietà della disuguaglianza sulle rappresentazioni: x1 > x 2 ⇔ X 1 > X 2 Questa rappresentazione, perciò, è utilizzata soltanto laddove siano richieste perlopiù somme algebriche e confronti logici fra gli operandi. Tipicamente si utilizza per rappresentare gli esponenti nella rappresentazione in virgola mobile. Esempio: rappresentazione in eccesso-8 su 4 bit n=4 Intervallo: [–8;7] Codifica: X=x+k; x X2 X10 7 6 1111 1110 15 14 5 4 1101 1100 13 12 3 2 1011 1010 11 10 1 0 1001 1000 9 8 -1 -2 0111 0110 7 6 -3 -4 0101 0100 5 4 -5 0011 3 -6 0010 2 -7 -8 0001 0000 1 0