Hi, Ich möchte -4-(-2) = -2 im Einerkomplement ausrechnen, jedoch komme ich nicht auf das richtige Ergebnis: -4 im Einerkomplement = 1011 -2 im Einerkomplement = 1101 1011 - 1101 ------ 1111 <- auf dieses Ergebnis komme ich - ich rechne folgendes: (beginnend von rechts nach links) 1-1 = 0 1-0 = 1 0-1 = 1 + Übertrag 1-1-Übertrag = 1 + Übertrag -> Addition an niederwertigsten Stelle 1110 + Übertrag = 1111 und das entspräche der 0 Die Addition von +2 klappt super, aber man muss doch auch -2 subtrahieren können!? Findet jemand den Fehler? Grüße Peter
Du machst 2 Fehler: 1. Du muß das Zweierkomplement verwenden. Das erhält man, wenn zum Einerkomplement 1 addiert wird. -4 im Zweierkomplement = 1100 2. Du rechnest falsch, da man dabei nur Addieren darf. Das Subtrahieren einer negativen Zahl wird zu einer Addition, da sich das Rechenzeichen und das Vorzeichen gegenseitig aufheben. -4-(-2) wird zu -4+2
Binärzahlen subtrahiert man, indem man das *komplement addiert. Wenn du durchgängig das Einerkomplement nimmst, hast du die Unschönheit mit zwei Nullen (0000 und 1111) im Zahlensystem. Einerkomplement -4 -2 -4 -(-2) -2 1011 - 1101 = 1011 + 0010 = 1101 Einerkomplement -4 -4 -4 -(-4) (-)0 0 1011 - 1011 = 1011 + 0100 = 1111 = 0000 Daher nimmt man lieber durchgängig das Zweierkomplement (=Einerkomplement+1) mit nur einer Null (0000) im Zahlensystem. Zweierkomplement -4 -2 -4 -(-2) -2 1100 - 1110 = 1100 + 0010 = 1110 Zweierkomplement -4 -4 -4 -(-4) 0 1100 - 1100 = 1100 + 0100 = 0000
@ GeraldB: zu Punkt 2. Minuend - Subtrahend = Differenz (-4) - (-2) = (-2) Mann kann schon die obige Gleichung direkt berechnen. Bei negativen Zahlen sind die führenden Bits gesetzt. Vorzeichenlos betrachtet sind die Zahlen also sehr groß. Das heißt, wenn Du den Zahlenstrahl als Kreis betrachtest reicht der Subtrahend vom Minuend bis zur Differenz und "passiert" dabei die Wertebereichsgrenzen und den Nullpunkt. 4 = 0100b -> Einerkomplement: 1011b -> Zweierkomplement: 1011b + 1b = 1100b -4 = 1100b 2 = 0010b -> Einerkomplement: 1101b -> Zweierkomplement: 1101b + 1b = 1110b -2 = 1110b 1100b - 1110b = 1110b
> 1. Du muß das Zweierkomplement verwenden. Das erhält man, wenn zum > Einerkomplement 1 addiert wird. -4 im Zweierkomplement = 1100 Ja, im Zweierkomplement klappt es, aber ich muss es leider auch im Einerkomplement bringen :-) > 2. Du rechnest falsch, da man dabei nur Addieren darf. Das Subtrahieren > einer negativen Zahl wird zu einer Addition, da sich das Rechenzeichen > und das Vorzeichen gegenseitig aufheben. > -4-(-2) wird zu -4+2 Ok danke das wollte ich wissen. Man darf also nur addieren.
@ Sven Woehlbier > Minuend - Subtrahend = Differenz > (-4) - (-2) = (-2) Ich verstehe nicht, was das mit meinem Beitrag zu tun hat.
>Du rechnest falsch, da man dabei nur Addieren darf. Nein. Subtrahieren geht auch, aber wie schon gesagt: im Zweierkomplement: >-4-(-2) = -2 dez dual -4 1100 - -2 - 1110 ------ ------ 11 ("geborgt") -2 (1)1110 Die 1 in der Klammer fällt weg ("geborter" Übertrag)
@ Matthias Lipinsky
> Nein. Subtrahieren geht auch,...
Auch wenn es geht, ist das nicht Sinn der Sache.
Damit man keine (kompliziertere) Subtraktion durchführen muß, addiert
man einfach das Zweierkomplement.
Mag sein, das das geht. Aber wenn ich a-b rechnen will, und das so einprogrammiere, kann es ja sein das b eine negative Zahl (im 2er Kompl) ist. Warum sollte ich dann eine Abfrage rein tun, die prüft ob b negativ ist, um dann das zweierkomplement zu bilden, nur um zu addieren?? da kann ich einfch auch das zweierkomplement von der variablen a abziehen. Was ist an einer Subtraktion kompliziert?
> Was ist an einer Subtraktion kompliziert?
Für eine CPU ist es auch nicht kompliziert, für einen Menschen aber
schon.
>für einen Menschen aber schon.
Find ich nicht.
@ Peter Kann es evtl. sein, daß die Rechenregel falsch ist. Wenn man den Übertrag (Borrow) der beim MSB entsteht vom LSB subtrahiert, dann wurde das Ergebnis stimmen.
GeraldB wrote: > Wenn man den Übertrag (Borrow) der beim MSB entsteht vom LSB > subtrahiert, dann wurde das Ergebnis stimmen. Der Übertrag muss addiert werden. http://www.i8086.de/historisches/einerkomplement.html Ich habe hier übrigens auch einen Fehler drin, der sich aber nicht auswirkt, weil der Borrow (Übertrag) 0 ist. Nimmt man (-4) - (2) geht das Beispiel schief. > Einerkomplement > -4 -2 -4 -(-2) -2 > 1011 - 1101 = 1011 + 0010 = 1101
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.