Übg 2.4

ZweiKomplement

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Übg 2.4
Hallo,
Wie kriegt das 2Komplement ein Zahl im Array?


Invertieren, binär eins addieren in einer Schleife.
Aufpassen mit Übertragen beim Addieren.


wie soll man auf die Übertragen aufpassen bzw. wann gibt es ein Übertrag :wink:


Überträge gibt es genau dann, wenn die Summe von mehreren Zahlen größer gleich Basis ^ Stellenanzahl ist. Z. B. ist 11111 (im Dualsystem) + 11111 = 111110. Gibt es nur 5 Bits zur Verfügung, so kann man die Zahl 111110 nicht darstellen und man muss die Zahl als 11110 schreiben. Dann wird 1 in die nächste Zahl übertragen. Besser erklärt wird das in GTI, zu finden unter http://www12.informatik.uni-erlangen.de/edu/gti/winter/script/ (sofern das Thema bereits behandelt wurde).


danke, das weiß ich, aber wie soll das Übertrag im Array behandeln? und die Array haben Dezimal oder Binärzahlen?


Kommt drauf an wie du die Werte in int interpretierst :stuck_out_tongue:
Übertrag entseht z.B. wenn man (2^31 - 1) + 1 rechne. Hier muss dann a[0] = 0 und a[1] = 1 sein.


d.h. die Arrays bestehen aus Binärzahlen… und wenn nach die Addition a[0]+b[0]=c[0] ein Übertrag(d.h. ein 1 übrig) gibt, wird diese Übertrag zu
c[1] weitergegeben (d.h. c[1]+1)…?


genau.
Und weil wir nur 31 von 32 Bit für unsere Zahlen nutzen, wissen wir, an welcher Stelle wir erkennen können, ob ein Übertrag anfällt.
Und das mit c[4] + 1 wäre natürlich etwas problematisch (außerdem steht in c[3] unser Erkennungs-Bit für negative Zahlen), aber in der Aufgabenstellung steht freundlicherweise:


Wie viele Bit sind für die Einträge der Array zu Verfügung? weil es wurde gesagt “…das 2^30-Bit von a[3] das Vorzeichenbit ist.”


Da es ein Array von int-Werten ist, besteht ein Eintrag aus 32 Bit. Benutzt werden in der Aufgabe aber nur die 31 niedrigsten.
Um Verwirrung vorzubeugen: Das 2^30-Bit ist das 31. bzw. das zweithöchste Bit. (Da wir bei 0 anfangen zu zählen, das 1. Bit ist das 2^0-Bit.)


Danke! wie soll das Subtraktion hier gemacht.( a-b = a +Zweierkomplement(b) ? )


Das ist richtig, a-b=a+(-b). Dabei ist -b Zweierkomplement von b.