Wer kann mir das Zweierkomplement erklären?

Hallo,

ich verstehe das Zweierkomplement überhaupt nicht. Kann mir das jemand anschaulich erklären?

Beispielsweise habe ich eine Dualzahl 1101. Davon soll das Zweierkomplement berechnet werden.... aber wie?
 
Um das Zweierkomplement zu erhalten musst du einfach diese Zahl von 0 abziehen:
0b-1101b = 11110011b
(Vorrausgesetzt, es ist ein 8 Bit-Wert)
 
das Zweierkomplement ist dazu da um mit negativen Zahlen umgehen zu können.

Man errechnet es eigentlich indem man den einfachen Bitwert negiert und 1 addiert :-)
also z.B. du hast z.b.. den Bitwert 5 = 0101
du negierst diese also 1010 und addiesrt 1 dazu also 1011
ist aber das selbe als wenn du die Dezimalzahl von 0 abziehst.

in dieser Schreibweise zeigt das höchstwertigste bit an ob es sich um eine negative oder eine positive zahl handelt.
z.b. bei 4 bit wäre 0001 = 1 oder 0111 = 7 oder 1111 = -1 oder 1000 = -8
es läst sich umrechnen in dem du den höchstwertigsten bit negierst also:

z.b. du hast die zahl 1010 = -6 du kommst auf die -6 indem du folgendes machst

1 0 1 0
1*( -8 ) + 0*4 + 1*2 + 0*1 = -6

da Befehle wie z.b. "ZAHL < 0" ein prozessor nicht so einfach ausführen kann, überlegte man sich eine andere methode wie man prüfen kann ob eine Zahl negativ oder positiv ist.

beim Zweierkomplement wird foglerndermaßen geprüft:

ein Bittwert z.b. 1010 wird mit dem Bitwert 1000 UND-verknüpft

also 1010 && 1000 = 0000
bei einer negativen zahl kommt immer der Bitwert 0000 heraus. Ein Prozessor kann nicht sagen ob eine Zahl kleiner oder größer 0 ist aber er kann sehr wohl sagen ob eine Zhal gleich 0 ist. Und mit diesem kleinen Trick kannst du auch mit negativen Zahlen umgehen.


P.S.
sorry ohne jegliche struktur erklärt
jedenfall wäre deine Zahl im Zweierkomplement die 0011
 
danke für die auführliche antwort. aber wie gehe ich vor, wenn meine Zahl schon negativ ist? Ich meine 1101 ist ja schon negativ. addiere ich jetzt einfach 1 drauf? aber dann komme ich nicht auf 0011...
 
das verfahren ist immer das gleiche, sowohl bei positiven als auch bei negativen zahlen.

0011 --> 1101 --> 0011

bei 2ten schritt machste das gleiche wie beim ersten. übrigens vereinfachte merkregel: alle bits invertieren, außer die letzte 1. alle zahlen danach (!) bleiben stehen.

also bei 0011 werden die ersten 3 invertiert, die letzte bleibt stehen. umgekehrt das gleiche.
 
ok gut, ich hoffe ich habe es verstanden. kann einer meine Beispiel mal überprüfen ob die richtig sind?

Beispiel 1: 1110101001

-> 0001010111

Beispiel 2: 010110

-> 101010

Beispiel 3: 1010011000

-> 0101101000
 
Das b soll andeuten, dass es sich um binäre Zahlen handelt. 10 ist ja nicht das gleiche wie 10b, aber ohne deutliche Kennzeichnung erkennt man den Unterschied nicht. Gängig ist auch 0b10 (dezimale 2) bzw. 0xA (hexadezimal, in dezimal wäre es eine 10).

mfg benediktibk
 
Zurück
Oben