Sottrazioni binarie

Neptune2
Piuttosto, posso chiedervi una mano sulle sottrazioni fra binari?
Però niente indovinelli, che già so che mi sto perdendo in un bicchier d'acqua, se poi non siete chiari e coincisi sono perso :D

Praticamente si è detto che per rappresentare in binario in un numero negativo si effettua il modulo due del numero ovvero si effettua il modulo 1 e poi si aggiunge 1. Dove per modulo 1 si intende convertire gli 1 in 0 e viceversa.

Ad esempio 8 = 01000 e -8 = 10111 in modulo 1 e 10111+1 = 11000 in modulo 2 (utilizzo 5 bit anzichè 4 altrimenti non riusciremmo ad effettuare la rappresentazione)

A questo punto se devo fare 10 -8 scrivero in colonna il corrispettivo dei due numeri e ne effettuero la somma.

In questo caso 10 = 1010 + 11000 ovvero 100010

Ovvero ignoriamo il bit in più, che sarà il segno e avremo 00010 ovvero 2 che è il nostro risultato.

Se facciamo invece -8 - 8 = -16 dobbiamo sommare il modulo 2 di 8 a se stesso ovvero:

11000+11000 = 110000 A questo punto però, essendo a sua volta un risultato negativo rifacciamo il modulo due del risultato e otteniamo 001111+1= 10000 che è proprio uguale a 16 in valore assoluto


Prendimo invece il caso in cui dobbiamo fare 8 -10 = -2, tradotta in binario dovremo fare.
1000 + il complemento 2 1010 = 0101 +1 quindi 1000 + 0110 = 1110 Dato che si tratta di un risultato negativo per riottenere il valore decimale in valore assoluto rifacciamo il complemento a 2 di 1110 che è 0001+1= 0010 ovvero 2.

Ho detto giusto fin qui?

Però c'era un caso particolare che diceva a lezione in cui nell'incolonnamento, se i due numeri avevano diverso numero di cifre, bisognava aggiungere un 1 o qualcosa del genere. Il punto è che non riesco più a trovare l'esempio, non riesco a trovare nulla nelle diappositive che lo spieghi, e quindi non so come vedere questa cosa.

Consigli?

Risposte
lorven

Però c'era un caso particolare che diceva a lezione in cui nell'incolonnamento, se i due numeri avevano diverso numero di cifre, bisognava aggiungere un 1 o qualcosa del genere. Il punto è che non riesco più a trovare l'esempio, non riesco a trovare nulla nelle diappositive che lo spieghi, e quindi non so come vedere questa cosa.


Credo sia questo il caso particolare.
Sottraendo due operandi con diverso numero di bit,
occorre esprimere il sottraendo con il numero di bit usato dal sistema di riferimento, e poi calcolarne il c. a 2.
Esempio: Calcolare in binario $8_10-3_10$, con rappresentazione su 8 bit.
Eseguiamo $1000_2 - 11_2$
il c. a 2 di $11_2$ NON è $00_2+1_2=01_2$, bensì $11111100_2 + 1_2 = 11111101_2$
Infatti:
$1000_2 + 11111101_2 = 100000101_2$
eliminando il bit 1 più a sinistra della somma, si ha $00000101_2 = 5_10$

Neptune2
Questo ero alla fin fine riuscito a capirlo ovvero: Se si parla di numeri in complemento a due le cifre nulle sono gli 1 e non gli 0 quindi, per incollonare i numeri bisogna aggiungere 1 e non 0. Viceversa per i numeri che non sono complementi a due si aggiunge 0. Ovviamente si parla nella parte tutta a sinistra, perchè viceversa si cambierebbe il valore dell'operazione.

Quello che mi manca ora è come faccio a capire se un numero binario è positivo o negativo in questa rappresentazione?

Cioè come faccio a sapere se il rsiultato è negativo e quindi per "ritraformarlo in binario" devo riutilizzare il complemento a 2?

Od anche come faccio a sapere se i due membri dell'operazione sono positivi o negativi? Certo se l'ho fatta prima in decimale e poi ho effettuato la conversione lo so a priori ma altrimenti?

Tra l'altro dal professore era stato asserito che se la somma, nella sottrazione, dava come risultato un overflow (quindi il riporto di un 1 oltre al numero di bit prefissato) allora doveva essere un numero negativo. La cosa però non mi torna, anche perchè non potrebbe esserci anche un overflow per numero positivo?

lorven
Cioè come faccio a sapere se il rsiultato è negativo e quindi per "ritraformarlo in binario" devo riutilizzare il complemento a 2?

Od anche come faccio a sapere se i due membri dell'operazione sono positivi o negativi? Certo se l'ho fatta prima in decimale e poi ho effettuato la conversione lo so a priori ma altrimenti?

Tra l'altro dal professore era stato asserito che se la somma, nella sottrazione, dava come risultato un overflow (quindi il riporto di un 1 oltre al numero di bit prefissato) allora doveva essere un numero negativo. La cosa però non mi torna, anche perchè non potrebbe esserci anche un overflow per numero positivo?

Assumiamo il byte per lunghezza degli operandi.
Allora il bit più a sinistra, come nella rappresentazione con modulo e segno, dà comunque il segno: 0 se positivo, 1 se negativo; infatti sono rappresentabili in c. a 2 tutti i numeri compresi fra $-2^7= -128=10000000_2$ e $+2^7-1=+127=01111111_2$
Ovviamente, se sommi 1 a 127 vai in overflow, ottenendo $10000000_2$, che corrisponde appunto a -128.

Neptune2
Quindi sono rppresentati tutti i numeri positivi e poi i negativi, al contrario insomma? visto che i numeri con esponente uno di regola dovrebbero essere i numeri più grandi? (avendo come bit più significativo 1).

Nel senso se inizio a contare da 0000 in poi ho lo 0, poi tutti i numeri positivi e poi tutti i negativi, o no?

lorven
Quindi sono rppresentati tutti i numeri positivi e poi i negativi, al contrario insomma? visto che i numeri con esponente uno di regola dovrebbero essere i numeri più grandi? (avendo come bit più significativo 1).

Nel senso se inizio a contare da 0000 in poi ho lo 0, poi tutti i numeri positivi e poi tutti i negativi, o no?
Sì.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.