Hallo, ich stehe gerade auf dem Schlauch bei einer einfachen Rechnung mit dem Zweierkomplement: 1 - 1, also 1 + (-1), jeweils dargestellt als 2-Bit-Zahl. 1 -> 01 +(-1) -> + 11 ---- ---- 0 100 = -4? Ich frage mich nun wo die vorderste 1 herkommt bzw. was ich falsch mache/nicht beachte. Diese scheint übrigens bei jeder Subtraktion hinzuzukommen. Ich denke dass das was mit den Bitweiten bzw. Zahlenbereichen zu tun hat, aber mir fehlt gerade eine griffige Erklärung.
:
Bearbeitet durch User
Du musst das Ergebnis auf die Stellenzahl der beiden Operanden begrenzen (in diesem Fall also auf 2).
-1 = 11 gilt nur, wenn Dein System genau zwei Stellen hat. Dann ist auch 00 = 0
Andreas F. schrieb: > dargestellt als 2-Bit-Zahl. jeweils dargestellt in der Bitbreite des Variablentyps... Also z.B. bei 8bit 00000001 + 11111111 = 00000000 Andreas F. schrieb: > Ich frage mich nun wo die vorderste 1 herkommt Deine vorderste 1 kommt gar nicht, weil... Andreas F. schrieb: > dargestellt als 2-Bit-Zahl ... ist es "00". Zweierkomplement-Addition und -Subtraktion funktioniert nur mit abgeschnittenem Überlauf korrekt. Wenn dein Ergebnis 4bit haben soll, musst du vorher vorzeichenrichtig die MSBs erweitern. mfg mf
Achim M. schrieb: > Wenn dein Ergebnis 4bit haben soll, musst du vorher vorzeichenrichtig > die MSBs erweitern. Vielen Dank für die schnellen Antworten. Heißt das, dass wenn ich sichergehen will, dass das Ergebnis in jedem Fall korrekt ist ungeachtet ob Addition oder Subtraktion, ich die beiden Summanden nach eventueller Bildung des Zweierkomplementes entsprechend um zwei (!) Bit mit 0 oder 1 erweitern muss, je nachdem ob die Zweierkomplementbildung erfolgte oder nicht?
Andreas F. schrieb: > je nachdem ob die Zweierkomplementbildung erfolgte oder nicht? Jein. Immer das MSB nach vorn ausrollen... 01 ---> 0001 11 ---> 1111 mfg mf
Andreas F. schrieb: > ich die beiden Summanden nach eventueller > Bildung des Zweierkomplementes entsprechend um zwei (!) Bit mit 0 oder 1 > erweitern muss Dir fehlt noch ein grundlegendes Verständnis. in einem 4 Bit System ist eine -1 nicht 0011 sondern 1111 Du bist vom Dezimalsystem gewohnt einfach dir vorne eine 0 davorzudenken. in einem K2 Komplementären Binärsystem geht das nicht so einfach. Negative Zahlen musst du hier mit einer 1 vorne erweitern. Edit: Achim war schneller
:
Bearbeitet durch User
Achim M. schrieb: > Jein. Immer das MSB nach vorn ausrollen... Genau das meinte ich. Danke für die Klärung!
10 - 110 = ? Die Umwandlung einer Subtraktion in eine Addition verläuft nach folgenden Schritten: 1. Der Subtrahend wird auf die volle Stellenzahl erweitert (Nullen nach links auffüllen). Hierbei muss die Breite der Komplementdarstellung beider Zahlen berücksichtigt werden. Üblich sind 4, 8, 16, 32 und 64 Bit. 0010 - 0110 = ? 2. Die einzelnen Stellenwerte des Subtrahenden werden negiert bzw. es wird das bitweise Komplement gebildet. Das bitweise Komplement von 0110 ist 1001. 3. Es wird das Zweierkomplement gebildet (Hinzuaddieren von 1). 1001 + 0001 = 1010 4. Minuend und Zweierkomplement werden addiert. 0010 + 1010 = 1100 Das Ergebnis ist -4. Bei der Addition von Minuend und Subtrahend kann es wie bei einer normalen Addition zu einem Stellenüberlauf kommen. Der Stellenüberlauf wird ignoriert. Das Ergebnis wird mit gleicher Stellenanzahl wie Minuend und Subtrahend interpretiert. Interessant wird das bei den Flags beim µC. Die "Überträge" verschwinden nicht im Nirvana, sondern wandern als Flags ins Statusregister. Als da wäre Carry, Negativ signiert, Halfcarry, Zero nur als Beispiele. ciao gustav
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.