Subtraktion mithilfe des Zweierkomplements

Lestas89

Bekanntes Mitglied
Guten Tag liebes Java-Forum!

Ich habe hier folgende Aufgabe:

(-120) - 8 soll in der Binärdarstellung mithilfe des Zweierkomplements berechnet werden. Es soll eine 8 Bit Darstellung verwendet werden.
Wie kann ich eine negative Zahl binär darstellen?

Das ist hier mein Hauptproblem.
 
Zuletzt bearbeitet:

uppss

Aktives Mitglied
Hallo Stas,

es ist schon einiges her, aber trotzdem...

nehmen wir an -12 muss binär dargestellt werden...
du machst einfach von 12 eine binäre Darstellung also:
12 = 1100 (1* 2^3 + 1*2^2 + 0*2^1 + 0*2^0 )
invertierst
0011
addierst 1 dazu
0011
+
......1
------
0100
schreibst du 1 davor -> damit zeigst du dass die Zahl halt negativ ist
10100 = -12

-120 = 10001000 -> als Hilfe, du muss aber selber den Weg zeigen!
 

Lestas89

Bekanntes Mitglied
Ich verstehe das nicht. Muss man nicht einfach invertieren und eine 1 dazu addieren?Das wäre dann noch 0100 gleich -12 oder nicht? Habe das gerade bei Wiki gefunden.

+4 − 3 = +1 entspricht: −4 − 3 = −7 entspricht:
00000100 11111100
+ 11111101 + 11111101
= 100000001 = 111111001

Als Beispiel -4 in 8 Bit Darstellung:

00000100 entspricht 4
Zweierkomplement:
11111011 +1
11111100. Das ist auch in dem Beispiel in Wiki so. Ist das nicht richtig?
 
Zuletzt bearbeitet:

Lestas89

Bekanntes Mitglied
Danke für deine Antwort. Dann müsste -120 in 8 Bit Darstellung doch: 0001000 sein, oder?

120 entspricht 1111000. Invertieren: 0000111 und eine 1 dazu: 0001000.

Ist das richtig?
 

uppss

Aktives Mitglied
ja, das ist richtig
-120 = 10001000 wie ich oben geschriebn habe.
Anberkung: 10100 = -12 richtig nur für einer 5 Bit Darstellung, macht man davon eine 8 Bit, sieht es anders aus:
-12 mit 8 Bit = 11110100
 

Meniskusschaden

Top Contributor
Um ein Gefühl dafür zu entwickeln, warum das Zweierkomplement eine so sinnvolle Darstellung ist, empfiehlt es sich, das mal mit Dezimalzahlen durchzuspielen.

Angenommen, man hat die zweistellige Zahl 26. Im Dualsystem ergibt die Summe aus einer Zahl und ihrem Einerkomplement (Invertieren der Bits) den größtmöglichen Wert für die Stellenzahl (also lauter Einsen). Das Pendant im Dezimalsystem wären demnach lauter Neunen. Man muß also für jede Ziffer unserer 26 die Ergänzung zur 9 einsetzen, also 2+7=9 und 6+3=9. So kommt man auf 73 (26+73=99).

Durch die Addition von 1 erhält man die nächsthöhere kleinstmögliche glatte Zahl (73+1=74; 26+74=100). Die Ursprungszahl 26 plus ihr "Zweierkomplement" 74 ergibt also genau 100. Die 74 kann in unserem System gut die -26 repräsentieren, denn mathematisch passiert genau das, was man erreichen möchte: 26 + 74 = 00 = 26 + (-26). Eigentlich kommt natürlich nicht 00 sondern 100 heraus, aber für die führende 1 ist bei zweistelligen Zahlen ja kein Platz mehr.

Bei den Dezimalzahlen sucht man also die Ergänzung zur nächsten glatten Dezimalzahl, die nicht mehr darstellbar ist (hier 100) und im Binärsystem die Ergänzung zur nächsten glatten Dualzahl (bei acht Bit 100000000, also neun Ziffern), was durch Invertieren und Addition von 1 für Prozessoren sehr einfach ist. Wenn man damit dezimal und binär ein wenig herum spielt, wird schnell klar, wie elegant und sinnvoll das alles ist.
 

Neue Themen


Oben