Hallo, ich beschäftige mich gerade mit der binären Subtraktion und bin da auf etwas gestoßen was mich etwas verwirrt. Hoffe auf diesem Wege das mir vieleicht hier jemand sagen kann was ich falsch mache, bzw. wo mein Denkfehler liegt. Ich möchte 100000 - 1001 rechnen. Rechne ich mit dem Subtraktionsübertrag, dem"Borrow" bekomme ich als Ergebnis: 010111. So weit so gut. Jetzt hab ich aber auch gelesen das man Subtrahieren kann, indem man: Die Subtraktion einer positiven Zahl ergibt dasselbe Ergebnis wie die Addition zu einer negativen Zahl mit dem gleichen Betrag. Also Addiere ich 100000 + 110111 und erhalte ebenfalls 010111 aber mit einem Übertrag vom MSB aus. Dies bedeutet doch aber das das Overflow-Flag gesetzt wird? Welcher Rechenweg ist den nun richtig? Vielen Dank im Vorraus für Eure Unterstützung.
Na ja afaik wird "der Rechner" die Zahl im Zweierkomplement addieren und da schnibbelt er vorne das Bit weg, was vom Übertrag kommt. Weiß nicht ob da ein Overflow-Flag gesetzt wird.
>Dies bedeutet doch aber das das Overflow-Flag gesetzt wird? >Welcher Rechenweg ist den nun richtig? Dein "Overflow"-Bit wird zum "Borrow"-Bit. Da dein Zahlenraum begrenzt ist, kannst du es beachten, kannst es aber auch sein lassen.
aber bekomme ich den hier nicht ein Borrow-Flag gesetzt , da ich mir wie in dem Beispiel keinen Übertrag hin zum MSB hole? (100000 - 1001) Das Overflow-Flag wird gesetzt beim Übertrag fort von dem MSB (100000 + 110111) Muss das Programm bei solch einem Überlauf nicht verändert werden? Veränderung der Operanden und oder der Wortlänge?
An der reinen Mathematik kannst Du nichts ändern! Subtraktion = Addition des Zweierkomplements. Basta! Wie das nun im Einzelfall auf die Logic des uCs abgebildet wird und welche Bits wie gesetzt werden hat sich dann ein Hersteller mal ünberlegt und in seinen Datenblättern festgehalten. Ich komme noch aus Zeiten von Z80 und 6502, da gab es nur ein Carry-Bit. Heute gibt es da diese Borrow-Bits, die das gleiche sind, nur invertiert. Aber da sehe ich einfach in das Datenblatt.
Am Borrow erkennst du, ob es einen "Unterlauf" gegeben hat, ebenso wie du am Carry einen Überlauf erkennen kannst. Johann
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.