Variable mit 12 Bit Wortlänge und das Zweierkomplement

Vulpecula

Commander
Registriert
Nov. 2007
Beiträge
2.246
Hallo!

Ich brüte momentan über einem Problem. Und zwar will ich den ganzzahligen (!) Wertebereich in einer Variable mit 12 Bit Wortlänge bestimmen.

Ganzzahlig bedeutet ja, dass der positive sowie negative Bereich abgebildet werden sollen. Mir ist auch klar, dass das höchstwertige Bit (MSB) quasi als Vorzeichen dient. Damit bleiben noch jeweils 11 Bit für den postiven bzw. negativen Zahlenraum. Mir ist auch klar, dass die negativen Zahlen als Zweierkomplement gebildet werden; also positive Zahl hernehmen, invertieren und 1 addieren.

An dieser Stelle gerät mein Verständnis der Sache allerdings ins Wanken. Ich geh das Ganze mal durch:

Minimum -> Maximum

1000 0000 0000 -> 0111 1111 1111 (binär)

-211 (-2048) -> 211-1 (=2047) (dezimal; -1 hier, weil die 0 ja bereits zum positiven Bereich gehört)

Ist es nicht so, dass der theoretische Wertebereich zwar bis -2048 runter geht, ich effektiv aber nur bis -2047 komme, da man maximal das Zweierkomplement aus 0111 1111 1111 bilden kann (was dann da -2047 wäre...)?

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.

MfG - Vulpecula
 
Du hast 2048 jeweils im positiven und negativen Bereich. Die Null gehört dabei zum Positiven. Warum solltest du nun nur maximal bis -2047 kommen?
 
Ich versuch mich mal daran zu erinnern:

Wir haben eine bestimmte Bitlänge definiert durch k, also sind darstellbar 2^k Zahlen.

Was dann in diese Gleichung resultiert:

-2^(k-1) <= x <= 2^(k-1)-1

Soweit hast du ja auch alles richtig. Wenn du jetzt -2048 ins Zweierkomplement umwandeln willst, musst du ja so vorgehen:

x = -2048 -> |x| = 2048 -> 1000 0000 0000 Das invertieren wir jetzt zu 0111 1111 1111, addieren dazu wieder eine 1 und bekommen: 1000 0000 0000.

Rechnung rückwärts: 1000 0000 0000 -> 0111 1111 1111 -> 1000 0000 0000


Bin mir nicht mehr ganz sicher ob es auch wirklich stimmt, bin mir aber relativ sicher.
 
Da hab ich irgendwo ein Verständnisproblem... Der positive Bereich umfasst ja 211 = 2048 Werte. Die Null gehört dazu, also ist der positive Wertebereich (nicht die Anzahl der Werte!) 0 bis 2047. Der negative Bereich umfasst ebenfalls 211 = 2048 Werte, der negative Wertebereich fängt aber erst bei -1 an und reicht somit bis -2048. Soweit ist noch alles klar.

Nur wie ist das ganze binär gelöst? Die darstellung erfolgt ja über das Zweierkomplement. Wenn ich also binär das Zweierkomplement zum positiven Maximum bilde, komme ich nicht auf -2048, sondern auf -2047, oder sehe ich das falsch?

0111 1111 1111 2 (Wert: 204710)
1000 0000 0001 2 (Wert: -204710 Zweierkomplement: invert und 1 addiert)


Wenn ich das Zweierkomplement zu 1000 0000 00002 (Wert: -204810)bilde, komme ich ja im Endeffekt wieder auf 1000 0000 00002 (invertieren, 1 addieren...)

Wo ist mein Denkfehler? :(
 
Zuletzt bearbeitet:
Der Denkfehler ist, dass du nicht den maximalen positiven Wert als Ausgangswert für die Umwandlung nehmen darfst.
Wenn du die Zweierkomplementdarstellung von -2048 haben willst gehst du so vor:
Du nimmst die positive Zahl 2048 (also 1000 0000 00002) und berechnest davon das Zweierkomplement.

1000 0000 00002 (noch nicht im Zweierkomplement) invertieren
-> 0111 1111 11112 und 1 addieren
-> 1000 0000 00002 = -2048 im Zweierkomplement
 
Zurück
Oben