[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 733.   Calcoli con i valori binari rappresentati nella forma usata negli elaboratori

Una volta chiarito il modo in cui si rappresentano comunemente i valori numerici elaborati da un microprocessore, in particolare per ciò che riguarda i valori negativi con il complemento a due, occorre conoscere in che modo si trattano o si possono trattare questi dati (indipendentemente dall'ordine dei byte usato).

733.1   Modifica della quantità di cifre di un numero binario intero

Un numero intero senza segno, espresso con una certa quantità di cifre, può essere trasformato in una quantità di cifre maggiore, aggiungendo degli zeri nella parte più significativa. Per esempio, il numero 01012 può essere trasformato in 000001012 senza cambiarne il valore. Nello stesso modo, si può fare una copia di un valore in un contenitore più piccolo, perdendo le cifre più significative, purché queste siano a zero, altrimenti il valore risultante sarebbe alterato.

Quando si ha a che fare con valori interi con segno, nel caso di valori positivi, l'estensione e la riduzione funzionano come per i valori senza segno, con la differenza che nella riduzione di cifre, la prima deve ancora rappresentare un segno positivo. Se invece si ha a che fare con valori negativi, l'aumento di cifre richiede l'aggiunta di cifre a uno nella parte più significativa, mentre la riduzione comporta l'eliminazione di cifre a uno nella parte più significativa, con il vincolo di mantenere inalterato il segno.

Figura 733.1. Aumento e riduzione delle cifre di un numero intero senza segno.

aumento e riduzione delle cifre binarie

Figura 733.2. Aumento e riduzione delle cifre di un numero intero positivo.

aumento e riduzione delle cifre binarie

Figura 733.3. Aumento e riduzione delle cifre di un numero intero negativo.

aumento e riduzione delle cifre binarie

733.1.1   Esercizio

Una variabile a otto cifre binarie, conviene un valore con segno, pari a 111000112. Questo valore viene copiato in una variabile a sedici cifre con segno. Indicare il valore che deve apparire nella variabile di destinazione.

sedici cifre con segno

733.1.2   Esercizio

Una variabile a sedici cifre binarie, contiene un valore con segno, pari a 00001111100011112. Questo valore viene copiato in una variabile a otto cifre con segno. Il risultato della copia è valido? Perché?

Il valore originale della variabile a sedici cifre con segno è pari a:

decimale

Il valore contenuto nella variabile a otto cifre con segno, potrebbe essere pari a:

decimale

733.1.3   Esercizio

Una variabile a otto cifre binarie, contiene un valore con segno, pari a 111000112. Questo valore viene copiato in una variabile a sedici cifre senza segno, ignorando il fatto che la variabile originale abbia un segno. Indicare il valore che appare nella variabile di destinazione dopo la copia.

sedici cifre con segno

Se successivamente si volesse considerare la variabile a sedici cifre usata per la destinazione della copia, come se fosse una variabile con segno, il valore che vi si potrebbe leggere al suo interno risulterebbe uguale a quello della variabile di origine?

733.2   Sommatorie con i valori interi con segno

Vengono proposti alcuni esempi che servono a dimostrare le situazioni che si presentano quando si sommano valori con segno, ricordando che i valori negativi sono rappresentati come complemento alla base del valore assoluto corrispondente.

Figura 733.8. Somma di due valori positivi che genera un risultato valido.

somma

Figura 733.9. Somma di due valori positivi, dove il risultato apparentemente negativo indica la presenza di un traboccamento.

somma

Figura 733.10. Somma di un valore positivo e di un valore negativo: il risultato è sempre valido.

somma

Figura 733.11. Somma di un valore positivo e di un valore negativo: in tal caso il risultato è sempre valido e se si manifesta un riporto, come in questo caso, va ignorato semplicemente.

somma

Figura 733.12. Somma di due valori negativi che produce un segno coerente e un riporto da ignorare.

somma

Figura 733.13. Somma di due valori negativi che genera un traboccamento, evidenziato da un risultato con un segno incoerente.

somma

Dagli esempi mostrati si comprende facilmente che la somma di due valori con segno va fatta ignorando il riporto, perché quello che conta è che il segno risultante sia coerente: se si sommano due valori positivi, perché il risultato sia valido deve essere positivo; se si somma un valore positivo con uno negativo il risultato è sempre valido; se si sommano due valori negativi, perché il risultato sia valido deve rimanere negativo.

733.2.1   Esercizio

Si esegua la somma tra due valori binari a otto cifre con segno, indicando anche il riporto eventuale: 010101012 + 011111102.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.2.2   Esercizio

Si esegua la somma tra due valori binari a otto cifre con segno, indicando anche il riporto eventuale: 110101012 + 011111102.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.2.3   Esercizio

Si esegua la somma tra due valori binari a otto cifre con segno, indicando anche il riporto eventuale: 110101012 + 100000012.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.3   Somme e sottrazioni con i valori interi senza segno

La somma di due numeri interi senza segno avviene normalmente, senza dare un valore particolare al bit più significativo, pertanto, se si genera un riporto, il risultato non è valido (salva la possibilità di considerarlo assieme al riporto). Se invece si vuole eseguire una sottrazione, il valore da sottrarre va «invertito», con il complemento a due, ma sempre evitando di dare un significato particolare al bit più significativo. Il valore «normale» e quello «invertito» vanno sommati come al solito, ma se il risultato non genera un riporto, allora è sbagliato, in quanto il sottraendo è più grande del minuendo.

Per comprendere come funziona la sottrazione, si consideri di volere eseguire un'operazione molto semplice: 1-1. Il minuendo (il primo valore) sia espresso come 000000012; il sottraendo (il secondo valore) che sarebbe uguale, va trasformato attraverso il complemento a due, diventando così pari a 111111112. A questo punto si sommano algebricamente i due valori e si ottiene 000000002 con riporto di uno. Il riporto di uno dà la garanzia che il risultato è corretto. Volendo provare a sottrarre un valore più grande, si vede che il riporto non viene ottenuto: 1-2. In questo caso il minuendo si esprime come nell'esempio precedente, mentre il sottraendo è 000000102 che si trasforma nel complemento a due 111111102. Se si sommano i due valori si ottiene semplicemente 111111112, senza riporto, ma questo valore che va inteso senza segno è evidentemente errato.

Figura 733.17. Sottrazione tra due numeri interi senza segno, dove il sottraendo ha un valore assoluto minore di quello del minuendo: la presenza del riporto conferma la validità del risultato.

sottrazione

Figura 733.18. Sottrazione tra due numeri interi senza segno, dove il sottraendo ha un valore assoluto maggiore di quello del minuendo: l'assenza di un riporto indica un risultato errato della sottrazione.

sottrazione

Sulla base della spiegazione data, c'è però un problema, dovuto al fatto che il complemento a due di un valore a zero dà sempre zero: se si fa la sottrazione con il complemento, il risultato è comunque corretto, ma non si ottiene un riporto.

Figura 733.19. Sottrazione con sottraendo a zero: non si ottiene riporto, ma il risultato è corretto ugualmente.

sottrazione

Per correggere questo problema, il complemento a due del numero da sottrarre, va eseguito in due fasi: prima si calcola il complemento a uno, poi si somma il minuendo al sottraendo complementato, aggiungendo una unità ulteriore. Le figure successive ripetono gli esempi già mostrati, attuando questo procedimento differente.

Figura 733.20. Il complemento a due viene calcolato in due fasi: prima si calcola il complemento a uno, poi si sommano il minuendo e il sottraendo invertito, più una unità.

sottrazione

sottrazione

Figura 733.22. Sottrazione con sottraendo a zero: calcolando il complemento a due attraverso il complemento a uno, si ottiene un riporto coerente.

sottrazione

733.3.1   Esercizio

Si esegua la somma tra due valori binari a otto cifre senza segno, indicando anche il riporto eventuale: 110101012 + 011101102.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.3.2   Esercizio

Si esegua la somma tra due valori binari a otto cifre senza segno, indicando anche il riporto eventuale: 110101012 + 111101102.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.3.3   Esercizio

Si esegua la sottrazione tra due valori binari a otto cifre senza segno, indicando anche il riporto eventuale: 110101012 - 111101102.

otto cifre con segno e con riporto

Il risultato della somma è valido?

733.3.4   Esercizio

Si esegua la sottrazione tra due valori binari a otto cifre senza segno, indicando anche il riporto eventuale: 110101012 - 000011112.

otto cifre con segno e con riporto

Il risultato della sottrazione è valido?

733.4   Somme e sottrazioni in fasi successive

Quando si possono eseguire somme e sottrazioni solo con una quantità limitata di cifre, mentre si vuole eseguire un calcolo con numeri più grandi della capacità consentita, si possono suddividere le operazioni in diverse fasi. La somma tra due numeri interi è molto semplice, perché ci si limita a tenere conto del riporto ottenuto nelle fasi precedenti. Per esempio, dovendo sommare 0101 1010 11002 a 1000 0101 01112 e potendo operare solo a gruppi di quattro bit per volta: si parte dal primo gruppo di bit meno significativo, 11002 e 01112, si sommano i due valori e si ottiene 00112 con riporto di uno; si prosegue sommando 10102 con 01012 aggiungendo il riporto e ottenendo 00002 con riporto di uno; si conclude sommando 01012 e 10002, aggiungendo il riporto della somma precedente e si ottiene così 11102. Quindi, il risultato è 1110 0000 00112.

Figura 733.27. Somma per fasi successive, tenendo conto del riporto.

somma

Nella sottrazione tra numeri senza segno, il sottraendo va trasformato secondo il complemento a due, quindi si esegue la somma e si considera che ci deve essere un riporto, altrimenti significa che il sottraendo è maggiore del minuendo. Quando si deve eseguire la sottrazione a gruppi di cifre più piccoli di quelli che richiede il valore per essere rappresentato, si può procedere in modo simile a quello che si usa con la somma, con la differenza che «l'assenza del riporto» indica la richiesta di prendere a prestito una cifra.

Per comprendere il procedimento è meglio partire da un esempio. In questo caso si utilizzano i valori già visti, ma invece di sommarli si vuole eseguire la sottrazione. Per la precisione, si intende prendere 1000 0101 01112 come minuendo e 0101 1010 11002 come sottraendo. Anche in questo caso si suppone di poter eseguire le operazioni solo a gruppi di quattro bit. Si esegue il complemento a due dei tre gruppetti di quattro bit del sottraendo, in modo indipendente, ottenendo: 10112, 01102, 01002. A questo punto si eseguono le somme, a partire dal gruppo meno significativo. La prima somma, 01112 + 01002, dà 10112, senza riporto, pertanto occorre prendere a prestito una cifra dal gruppo successivo: ciò significa che va eseguita la somma del gruppo successivo, sottraendo una unità dal risultato: 01012 + 01102 - 00012 = 10102. Anche per il secondo gruppo non si ottiene il riporto della somma, così, anche dal terzo gruppo di bit occorre prendere a prestito una cifra: 10002 + 10112 - 00012 = 00102. L'ultima volta la somma genera il riporto (da ignorare) che conferma la correttezza del risultato complessivo, ovvero che la sottrazione è avvenuta con successo.

Va però ricordato il problema legato allo zero, il cui complemento a due dà sempre zero. Se si cambiano i valori dell'esempio, lasciando come minuendo quello precedente, 1000 0101 01112, ma modificando il sottraendo in modo da avere le ultime quattro cifre a zero, 0101 1010 00002, il procedimento descritto non funziona più. Infatti, il complemento a due di 00002 rimane 00002 e se si somma questo a 01112 si ottiene lo stesso valore, ma senza riporti. In questo caso, nonostante l'assenza del riporto, il gruppo dei quattro bit successivi, del sottraendo, va trasformato con il complemento a due, senza togliere l'unità che sarebbe prevista secondo l'esempio precedente. In pratica, per poter eseguire la sottrazione per fasi successive, occorre definire un concetto diverso: il prestito (borrow) che non deve scattare quando si sottrae un valore pari a zero.

Se il complemento a due viene ottenuto passando per il complemento a uno, con l'aggiunta di una cifra, si può spiegare in modo più semplice il procedimento della sottrazione per fasi successive: invece di calcolare il complemento a due dei vari tronconi, si calcola semplicemente il complemento a uno e al gruppo meno significativo si aggiunge una unità per ottenere lì l'equivalente di un complemento a due. Successivamente, il riporto delle somme eseguite va aggiunto al gruppo adiacente più significativo, come si farebbe con la somma: se la sottrazione del gruppo precedente non ha bisogno del prestito di una cifra, si ottiene l'aggiunta una unità al gruppo successivo.

Figura 733.28. Sottrazione per fasi successive, tenendo conto del prestito delle cifre.

sottrazione

Figura 733.29. Verifica del procedimento anche in presenza di un sottraendo a zero.

sottrazione

La sottrazione per fasi successive funziona anche con valori che, complessivamente, hanno un segno. L'unica differenza sta nel modo di valutare il risultato complessivo: l'ultimo gruppo di cifre a essere considerato (quello più significativo) è quello che contiene il segno ed è il segno del risultato che deve essere coerente, per stabilire se ciò che si è ottenuto è valido. Pertanto, nel caso di valori con segno, il riporto finale si ignora, esattamente come si fa quando la sottrazione avviene in una fase sola, mentre l'esistenza o meno del traboccamento deriva dal confronto della cifra più significativa: se la sottrazione, dopo la trasformazione in somma con il complemento, implica la somma valori con lo stesso segno, il risultato deve ancora avere quel segno, altrimenti c'è il traboccamento.

Se si volessero considerare gli ultimi due esempi come la sottrazione di valori con segno, il minuendo si intenderebbe un valore negativo, mentre il sottraendo sarebbe un valore positivo. Attraverso il complemento si passa alla somma di due valori negativi, ma dal momento che si ottiene un risultato con segno positivo, ciò manifesta un traboccamento, ovvero un risultato errato, perché non contenibile nello spazio disponibile.


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome calcoli_con_i_valori_binari_rappresentati_nella_forma_usat_1.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory