Domanda

sto guardando alcuni grandi lezioni da David Malan ( qui ) che sta andando oltre binario. Ha parlato firmato unsigned, complimento / 1 di, e 2 di rappresentazioni complemento. C'era un'aggiunta fatta di 4 + (-3), che in fila in questo modo:

0100
1101 (flip 0011 to 1100, then add "1" to the end)
----
0001

Ma lui agitava le mani magiche e buttato via l'ultimo trasporto. Ho fatto qualche po 'di ricerca wikipedia non riusciva a farlo, qualcuno può spiegarmi perché quel particolare carry (in 8 del -> 16 di colonne)? È stato abbandonato, ma lui continuava a quella appena prima di esso

Grazie!

È stato utile?

Soluzione

L'ultima carry è stata abbandonata perché non rientra nello spazio di destinazione. Sarebbe il quinto bit.

Se avesse effettuato la stessa aggiunta, ma con per lo stoccaggio ad esempio 8 bit, avrebbe guardato in questo modo:

00000100
11111101
--------
00000001

In questa situazione ci sarebbe anche essere bloccato con un carry "non utilizzati".

Dobbiamo trattare porta questo modo di fare più con il lavoro complimento due di correttamente, ma questo è tutto bene, perché questo è il modo più semplice di trattare porta quando si hanno limitato la conservazione. Ad ogni modo, si ottiene il risultato corretto, a destra:)


86-processori memorizzare tale riporto supplementare nel carry flag (CF), che è possibile testare con determinate istruzioni.

Altri suggerimenti

un riporto non è la stessa di un overflow

In questo esempio si ha un riporto dal MSB. Per definizione, questo bagaglio finisce sul pavimento. (Se ci fosse un posto per farlo andare, allora non sarebbe stato fuori dal MSB).

Ma l'aggiunta di due numeri con segni diversi non può traboccare. Un overflow può accadere solo quando due numeri con lo stesso segno di produrre un risultato con un segno diverso.

Se si estende il lato sinistro con l'aggiunta di più posizioni cifre, vedrete che i rotoli riporto in un numero infinito di posizioni di bit verso sinistra, in modo da non avere realmente un riporto finale 1. Così il risposta è positiva.

 ...000100
+...111101
----------
....000001

A un certo punto è necessario impostare il numero di bit per rappresentare i numeri. Scelse 4 bit. Qualsiasi portare nel 5 ° bit viene perso. Ma va bene perché ha deciso di rappresentare il numero in soli 4 bit.

Se avesse deciso di utilizzare 5 bit per rappresentare i numeri che avrebbe ottenuto lo stesso risultato.

Questa è la bellezza di esso ... Il risultato sarà la stessa dimensione come i termini si sta aggiungendo. Così il quinto bit viene buttato fuori

In complemento a 2 si utilizza il bit di riporto per segnalare se ci fosse un overflow nel l'ultima operazione.

È necessario guardare ai Ultimi due bit di carry per vedere se ci fosse troppo pieno. Nel tuo esempio, gli ultimi due bit di carry sono stati 11 il che significa che non c'era troppo pieno.

Se gli ultimi due bit di riporto sono 11 o 00 quindi verificato overflow. Se gli ultimi due bit carry sono 10 o 01 poi c'era troppo pieno. Ecco perché a volte a cuore il bit di riporto e altre volte l'ignorò.

La prima riga sotto è la fila di riporto. Più a sinistra bit in questa riga vengono utilizzati per determinare se c'era trabocco.

1100
 0100
 1101
 ----
 0001

Sembra che si sta utilizzando solo 4 bit, quindi non c'è alcuna colonna di 16 anni.

Se si sta utilizzando più di 4 bit, allora la rappresentazione -3 sarebbe stato diverso, e il riporto della matematica sarebbe ancora essere buttato fuori alla fine. Ad esempio, con 6 bit avreste:

 000100
 111101
 ------
1000001

e dal momento che il riporto è al di fuori della gamma di bit della vostra rappresentazione è andato, e hai solo 000001

Si consideri 25 + 15:

5 + 5 = 10, manteniamo il 0 e lasciare che il 1 vai alle decine colonne. Poi è 2 + 1 (+ 1) = 4. Quindi il risultato è 40:)

E 'la stessa cosa con i binari. 0 + 1 = 1, 0 + 0 = 0, 1 + 1 = 10 => inviare il 1 l'8 colonne, 0 + 1 (+ 1) = 10 => inviare il 1 alla colonna successiva - Ecco il troppopieno e il motivo per cui abbiamo solo buttare il 1 distanza.

Questo è il motivo per cui complemento a 2 è così grande. Esso consente di aggiungere / sottrarre proprio come si fa con la base-10, perché si (ab) uso il fatto che il segno-bit è il MSB, che a cascata le operazioni fino a overflow, quando nessecary.

La speranza mi sono fatto capire. Piuttosto difficile explan questo quando l'inglese non si è lingua madre:)

Quando si esegue oltre complemento a 2, l'unica volta che un riporto indica un problema è quando c'è una condizione di overflow -. Che non può accadere se i 2 operandi hanno un segno diverso

Se hanno lo stesso segno, allora la condizione di overflow è quando cambia il bit di segno dai 2 operandi, vale a dire., C'è un riporto in il bit più significativo.

Se non ricordo la mia architettura del computer learnin' questo è spesso rilevato a livello hardware da una bandiera che è impostato quando il riporto nel bit più significativo è diverso che il riporto dal bit più significativo . Che non è il caso nel tuo esempio (c'è un riporto in MSB così come fuori dalla MSB).

Un modo semplice di pensare è come "il segno non cambia". Se il riporto nella MSB è diverso dal portare a termine, quindi il segno è impropriamente cambiato.

Il riporto è stata abbandonata perché non c'era niente che potrebbe essere fatto con esso. Se è importante risultato, significa che l'operazione traboccato l'intervallo di valori che possono essere memorizzati nel risultato. In assembler, di solito c'è un'istruzione che può testare per il riporto oltre la fine del risultato, e si può in modo esplicito che fare con esso - ad esempio, portandola nella prossima parte alta di un valore a precisione multipla

.

Perché si parla di circa 4 rappresentazioni bit. E 'unussual rispetto ad una macchina reale, ma se dovessimo dare per scontato che un computer ha 4 bit in ogni byte per un momento, poi abbiamo le seguenti proprietà: un byte avvolge a 15 -15. Tutto ciò al di fuori di tale intervallo non può essere immagazzinata. Inoltre, cosa vorresti fare con un 5 ° extra po 'al di là del bit di segno comunque?

Ora, dato che, possiamo vedere dalla matematica di tutti i giorni che 4 + (-3) = 1, che è esattamente quello che abbiamo ottenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top