Aiuto differenza numeri binari in modulo e segno

Quixote
Salve ragazzi potreste darmi una mano cortesemente con questo esercizio?

" Sono dati i seguenti numeri in modulo e segno A=111001 e B=001111.
Eseguire l’operazione C=A-B. "

Non riesco a capire come procedere :|

Risposte
apatriarca
Ma che numeri sono? Hai provato a convertirli?

Quixote
E' un esercizio di un appello di esame, purtroppo la soluzione non c'è, potreste aiutarmi?

apatriarca
Il metodo più semplice è convertire quei numeri in decimale, fare la sottrazione e poi ricalcolare il numero in binario. Hai idea di come si faccia la conversione decimale-binario e viceversa? Se non hai idea di come farlo ti consiglio di metterti a studiare la teoria.

Quixote
uhmm allora quindi io faccio:

A = -25
B = 15

quindi C dovrebbe essere: - 25 - 15 = - 40?

E' corretto?

apatriarca
A questo punto però lo devi convertire in binario.. Il problema è che non è possibile convertire questo numero in binario con quel numero di bit. Servirebbe un bit in più. La soluzione dipende in realtà quindi da come è definita la differenza. Ci sono in effetti modi diversi di implementare quella differenza e la soluzione dipenderà dall'algoritmo usato.

Quixote
Come algoritmo usato cosa intendi? Un algoritmo ad esempio è: converto entrambi in complemento a 2 e poi faccio A+ complemento a 2 di B? oppure un altro è: inverto il bit del segno di B e poi sommo A+B?

Intendi queste cose?

apatriarca
Sì. Questo genere di cose. Cosa dice la teoria di overflow/underflow?

Quixote
Uhm allora, l'overflow si può verificare solo se si sommano due numeri negativi o si sommano due numeri positivi ed il risultato non è rappresentabile dal numero di bit che si ha a disposizione.

Si verifica quindi un riporto sul segno che viene perciò invertito:
1) sommando due numeri negativi il segno diventa positivo
2) sommando due numeri positivi il segno diventa negativo

A questo punto però una volta individuato l'overflow non mi è chiaro come procedere...

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