2012-03-01 12 views
10

Sto frequentando un corso di informatica e assemblaggio. La parte scritta del nostro laboratorio questa settimana ha una domanda su di esso che mi ha lasciato perplesso. La domanda legge ...Sottrai un numero binario senza segno di grandi dimensioni da uno più piccolo

Sottrarre i seguenti numeri binari senza segno (mostra i bit di prestito e di overflow). Non convertire in complemento a due.

0101 0111 1101 
-1110 1011 0110 
-------------- 

mi rendo conto che la risposta è -1001 0011 1001 ma sto avendo un momento difficile cercando di capire come prendere in prestito per eseguire realmente questa sottrazione prendendo il numero più grande e sottraendo dal numero più piccolo e mostra il mio lavoro. Per tutta la vita, sottraendo un numero elevato da un numero ridotto, ho invertito il problema e invece ho sottratto il numero più piccolo dal numero più grande e aggiunto un segno negativo davanti al risultato. Ho chiesto al professore e lui dice che vuole che il problema sia risolto nel modo in cui è stato scritto. Non sono autorizzato a risolvere questo problema sottraendo il numero più piccolo dal numero più grande e negando come farei normalmente. Non sono stato in grado di trovare alcun esempio online di sottrarre un numero binario senza segno più grande da uno più piccolo.

Apprezzerei molto se qualcuno potesse descrivermi come eseguire la sottrazione in questo scenario.

Aggiornamento: @Alex è corretto. Il professore cercava

0110 1100 0111 (1735) 

Grazie a tutti.

+2

Sei sicuro che non desidera '0110 1100 0111' con l'indicazione di alcuni bit di prestito e un bit di overflow? – Beta

+0

@Beta: No, la risposta è '-1001 0011 1001' (-2361). Sta solo lavorando con i normali numeri binari, non con una particolare rappresentazione del computer come il complemento a 2. –

+0

Non sono sicuro che il professore fosse dopo -1001 0011 1001 (-2361) o 0110 1100 0111 (1735), ho finito con il 1735. Penso che @Beta abbia ragione. Riporterò ciò che cercava quando il laboratorio viene restituito. –

risposta

7

Lo si fa allo stesso modo indipendentemente dal numero che è più grande e che è più piccolo.

bb b  bb <- borrows 
0101 0111 1101 (1405) 
-1110 1011 0110 (3766) 
-------------- 
0110 1100 0111 (1735?) 

Ora, se si desidera una differenza adeguata, è necessario prendere in considerazione l'overflow in quanto il risultato di cui sopra non comprende il bit del segno:

b bb b  bb <- borrows 
0 0101 0111 1101 (1405) 
-0 1110 1011 0110 (3766) 
---------------- 
1 0110 1100 0111 (-2361 signed 2's complement) 

Davvero, la CPU non lo fa cura cosa viene sottratto da cosa. Utilizza lo stesso algoritmo per l'addizione/sottrazione di interi, inoltre, questo algoritmo è lo stesso per interi con segno e senza segno. Devi solo interpretare correttamente il risultato e le flag di carry e overflow. È tutto.

+1

-1 ha detto in particolare che non sta lavorando nel complemento a 2 –

+0

Grazie Alex. Ho il sospetto che il tuo esempio migliore sia quello che il professore sta cercando. Questo è quello che ho sempre ottenuto cercando di risolvere il problema. Penso che potrebbe essere stato il punto del problema ... per mostrare che la sottrazione non produce il risultato giusto in questo scenario. Penso che stavo solo affrontando il problema dalla mentalità sbagliata. –

+0

@ BlueRaja-DannyPflughoeft: Ha detto "Non convertire in complemento a due". e non ho convertito nulla. –

-1

semplicemente sottrarre i due numeri binari così come sono, quindi prendere il complemento a 2 del risultato. Ecco!

Problemi correlati