Subtraktion zweier Dualzahlen

Hi,
in meinem Skript zur Technischen Informatik wird folgendes Verfahren vorgestellt:

Subtraktion

Die Subtraktion zweier Dualzahlen erfolgt meist durch die Addition des Zweier-Komplements
(zur nächst höheren Basispotenz). Hierbei berechnet sich die Differenz D aus Minuend M
und Subtrahend S wie folgt:

D = M - S = M +(B^n - S) - B^n = M + K - B^n

mit K = B^n - S (Zweierkomplement)

Beispiel 123 - 11 = 112

123 = 1111011; 11 = 1011

1111011 – 1011 = 1111011 + (10000000 – 1011) – 10000000
= 1111011 + (1111111 – 1011 + 1) – 10000000
11100002 = 11210
= 1111011 + (1110100 + 1) – 10000000 = 1111011 + 1110101 – 10000000
= 11110000 – 10000000
= 1110000

Meine Fragen dazu: Ich verstehe das so, dass die Subtraktion durch eine Addition ausgedrückt werden
soll, aber warum tauchen dann mitten im Verfahren wieder Subtraktionen auf.
und was bedeutet … + (10000000-1011)-10000000 ?

(10000000-1011)-10000000=-1011

reine Algebra, geht mit Dualzahlen genau so wie mit Dezimalzahlen, es wurde nur 0 = 10000000 -10000000 künstlich eingefügt

Warum das ganze: das Zweierkomplement ist im wesentlichen ein Bit-Flip 0<->1, ist wahnsinnig leicht zu berechnen

Und die Subtraktion (M+K)-B^n ist einfach (denk mal drüber nach wie das aussieht)

Und wenn dein Mikroprozessor schon zwei Register addieren kann, dann wärs doch albern auch noch die Subtraktion in Silizium zu gießen, wenn es einfacher auch geht

[quote=bisaflor]D = M - S = M +(B^n - S) - B^n = M + K - B^n[/quote]Ich weiß ja nicht, von wem diese komische Formel stammt aber eigentlich basiert das Zweierkomplement selbst ausschließlich auf Addition und Negation.

Der Knackpunkt dabei ist, dass das ausschließlich mit Zahlen fester Länge funktioniert, wir aber immer Zahlen flexibler Länge gewöhnt sind. Das Umdenken ist der entscheidende Schritt zum Verständnis. Darüber hinaus ist das höchstwertige Bit nicht Teil des Wertes sondern das Vorzeichen.

Um das Beispiel aufzunehmen:[quote=bisaflor;123713]123 - 11 = 112

123 = 1111011; 11 = 1011[/quote]Hier liegt schon das erste Problem, das diese komplizierte Formel notwendig macht. Es fehlt nämlich der Schritt, die führenden Nullen zu ergänzen. Das geht aber nur, wenn man sich für eine Zahlenlänge entscheidet.
Man kann also klassisch mit 8 Bit weiterrechnen (123 = 01111011; 11 = 00001011),
etwas moderner mit 16 Bit (123 = 0000000001111011; 11 = 00000000000001011),
oder mit 32 Bit (123 = 0000000000000000000000000001111011; 11 = 00000000000000000000000000000001011)
(Das ist noch nicht das Ende… ;o))

Bleiben wir mal bei 8.
Wir negieren also den Minuend bitweise:
00001011 -> 11110100

und addieren dann eine 1
11110100 + 1 = 11110101

Jetzt werden Minuend und das Zweierkomplement des Subtrahenden addiert, aber der Übertrag in die 9te Stelle wird verworfen:

   01111011
  +11110101
------------
(1)00010000 (edit SlaterB: oder (1)01110000 ? )

Die Formel beschreibt das dadurch, dass der Wert für die 9te Stelle (Also die nächste nach der definierten Länge) wieder abgezogen wird.

bye
TT

ok, dein Beitrag hat mir weitergeholfen ich fand die Erklärung mit der Formel auch merkwürdig, da es ja auch einfachere Erklärungen (wie deine) gibt.

die angegebene Formel hat aber ihre eigenen Schönheiten, ist unabhängig von der Anzahl der Ziffern,
die Umwandlung von -S zu +(B^n - S) - B^n ist vollkommen natürlich korrekt, ohne Konventionen wie ein Bit für Negation zu benötigen

interessant wird es wenn das Ergebnis negativ wird, umdreht müsste es lauten:

11 - 123
= 1011 - 1111011 = 1011 + (10000000 – 1111011) – 10000000
= 1011 + (1111111 – 1111011 + 1) – 10000000
= 1011 + (100 + 1) – 10000000 = 1011 + 101 – 10000000
= 10000 – 10000000
= 16 - 128

ohne Negativdarstellung für Zahlen kann das ‚natürliche positive‘ Rechensystem hier wohl nur stehenbleiben

falls die korrekte Darstellung von -112 in 8 Bit nach meinem Java-Vorschlag 10010000 sein sollte, dann kann man das aber ja auch ganz gut ablesen

die 8te Stelle hier, mit höchst wichtigen Auswirkungen

danke für deine Anmerkungen auch wenn ich sie nicht ganz verstehe^^
Da ich sowieso nur mit dem Skript aus dem Vohrjahr vorlerne ist es jetzt eh nicht so wichtig. Ich bin mal gespannt ob ich es in der Vorlesung besser verstehe,
da ich verbale Erklärungen oft besser verstehe als wenn ich mir selber etwas durchlese.
Ansonsten bleibe ich bei dem Verfahren von Timothy da es mir einfacher erscheint :smiley: